PHP中MVC框架之文件入口实例详解

MVC的文件入口怎么写,完全是根据程序员的引擎设计来做,也是根据程序员喜好来做,但我们的最终目的却是通过简单的代码引入引擎来处理其它的事务,就像我们要开车一样,我们首先要点火,发动机才能发动一样。在写入口之前我们需要考虑几个方面,URL解析方式,需要哪些用户参数或系统需要带入,用户参数需要更改的地方,我们需要统一用一个文件来引入,文件可以是xml,也可以的PHP,也可以是其它的想到的方法,但keheng这里用的却是php里面数组形式引入,这种形式貌似写缓存的形式,从数据库读取了数据再生成一个php文件,再require此文件即可。当然,也可以在写引擎的过程中再写入口也行,只要能达到我们的目的就行。

就我们平常见到的文件入口来看,文件入口一般分为单文件入口和多文件入口,当然也有可能有其它的文件入口没见过。

单文件入口当然是指网站访问始终都是有访问index.php这个文件,但关系到里面显示的内容却是根据后台的参数来加载,

比如:http://www.XXXX.com/index.php? Conttoller=index&action=show&id=1

这里的Conttoller就是我们需要显示的页面,通过获取Conttoller的值来确实我们的MVC加载的是哪个模型,显示的是哪个视图,一般都需要建立一个专用的路由类来进行地址的判断。action则是此模型的哪个操作,比如是显示数据,或者添加数据,或者显示文章类的,至于ID的作用是什么这里就不用说了。

多文件入口当然是指网站里面除了index.php文件名,还有其它文件访问,比如同一个网站下有index.php,about.php………..等。

但还有另外一种URL方式http://localhost/control/ index / action/1,这种方式并未指定访问这个目录下的哪个文件,一般默认的当然是index.php或者index.html,个人认为这种方式不管是程序制作或维护都较麻烦点,所以现在也很少见到有这种形式的URL,以前看过有关SEO的文章,貌似入口为这种类型的对SEO优化不太好(keheng个人愚见)。其实是不是不太好我们平常就可以观察到,比如我们百度下,随便输入一个关键词,在开头几页基本不到类似的地址被搜索出来。在SEO优化中就有一条为地址url的层级结构保持在三层内为宜。我们做WEB项目前当然要考虑到这些问题了。

以下为网上下载的一个模板的文件入口:

 代码如下 复制代码

define('UPLOAD_PATH', './Uploads/');
 
 define('VERSION', 'v2.1 Released');
 
 define('UPDATETIME', '20120323');
 
 define('APP_NAME', 'myphp');
 
 define('APP_PATH', './myphp/');
 
 define('APP_LANG', true);
 
 define('APP_DEBUG',false);
 
 define('THINK_PATH','./Core/');
 
 require(THINK_PATH.'/Core.php');

它的核心是THINK,入口指定了程序版本,更新日期等,真正的处理文件却是在Core.php文件里。由于PHP模板都是开源的,个人认为可能有些网络公司为了不让别完全搞清楚他的产品,故意在PHP代码里面多层次调用,来迷惑想学习他代码思路的程序员,让程序员跟来跟去跟的一头雾水,其实我就这样过,也可能是自己阅历不够造成的。

 代码如下 复制代码

<?php
 
          require_once './include/common.inc.php';
 
          $views->display('index.html');        
 
 ?>

加载了引擎文件后,在告诉$views类显示哪一个视图文件,这样确实是直观很多,但我个人不怎么喜欢这种方法,虽然如果修改文件模板直接在对应的文件进行修改,感觉不太好控制,而且貌$views到最后没关闭,占着内存。

 

看了些别人的入口后keheng自己也有了入口的思路。不管是单文件还是多文件,全都用这入口,总之网站根目录下文件内容全都是这个

 代码如下 复制代码

<?php
 
          require 'command/config.php';
 
          require 'command/app.php';
 
          app::run($config);
 
 ?>

实际上我的对像模型是在config.php里设置好的

 代码如下 复制代码

<?php
 
 $config['Templates'] = array(                //名称记得全转为小写
 
          ‘keheng’                              =>                                 array('keheng.php',0),
 
          ' index '                                 =>                                 array('index.php',0),
 
 );
 
 ?>

分析地址调用相应的视图,这样我就可以专门用一个文件来进行模型与视图对应设置,在用的时候即可用require 'command/config.php';加载这个数组。

可能有高人会认为这种方法貌似不太好,可能是keheng见识太少阅历不够或技术还不够,现在还没想到更好一些的方法

时间: 2024-09-26 19:21:04

PHP中MVC框架之文件入口实例详解的相关文章

PHP中TP5 上传文件的实例详解

php 文件上传 效果图: 实现代码: application\index\controller\Index.php <?php namespace app\index\controller; use think\Controller; use think\Request; class Index extends Controller { //文件上传表单 public function index() { return $this->fetch(); } //文件上传提交 public fu

SQLserver中cube:多维数据集实例详解

1.cube:生成多维数据集,包含各维度可能组合的交叉表格,使用with 关键字连接 with cube 根据需要使用union all 拼接 判断 某一列的null值来自源数据还是 cube 使用GROUPING关键字 GROUPING([档案号]) = 1 : null值来自cube(代表所有的档案号) GROUPING([档案号]) = 0 : null值来自源数据 举例: SELECT * INTO ##GET FROM (SELECT * FROM ( SELECT CASE WHEN

JS中的hasOwnProperty()和isPrototypeOf()属性实例详解_javascript技巧

这两个属性都是Object.prototype所提供:Object.prototype.hasOwnProperty()和Object.prototype.isPropertyOf() 先讲解hasOwnProperty()方法和使用.在讲解isPropertyOf()方法和使用 看懂这些至少要懂原型链 一.Object.prototype.hasOwnProperty() 概述 hasOwnProperty()方法用来判断某个对象是否含有指定的自身属性 语法 obj.hasOwnPropert

Angular中$cacheFactory的作用和用法实例详解_AngularJS

先说下缓存: 一个缓存就是一个组件,它可以透明地储存数据,以便以后可以更快地服务于请求.多次重复地获取资源可能会导致数据重复,消耗时间.因此缓存适用于变化性不大的一些数据,缓存能够服务的请求越多,整体系统性能就能提升越多. $cacheFactory介绍: $cacheFactory是一个为Angular服务生产缓存对象的服务.要创建一个缓存对象,可以使用$cacheFactory通过一个ID和capacity.其中,ID是一个缓存对象的名称,capacity则是描述缓存键值对的最大数量. 1.

Android MotionEvent中getX()和getRawX()的区别实例详解

Android MotionEvent中getX()和getRawX()的区别实例详解 实例代码: public class Res extends Activity implements View.OnTouchListener { Button btn = null; int x = 0; int y = 0; int rawx = 0; int rawy = 0; @Override public void onCreate(Bundle savedInstanceState) { sup

Android 中ViewPager重排序与更新实例详解

Android 中ViewPager重排序与更新实例详解 最近的项目中有栏目订阅功能,在更改栏目顺序以后需要更新ViewPager.类似于网易新闻的频道管理. 在重新排序之后调用了PagerAdapter的notifyDataSetChanged方法,发现ViewPager并没有更新,于是我开始跟踪源码,在调用PagerAdapter的notifyDataSetChanged方法后,会触发Viewpager的dataSetChanged方法. void dataSetChanged() { //

Android local.properties 文件读取实例详解

Android local.properties 文件读取实例详解 在Android Studio项目里面有个local.properties文件,这个文件可以放一些系统配置.比如:sdk路径.ndk路径. ndk.dir=D\:\\soft\\android-ndk-r10e sdk.dir=D\:\\soft\\SDKandroidStudio 当然我们也可以在local.properties放一些自定义的配置,比如签名文件: key.file=C\:\\work\\Key.jks keyA

Android 中CheckBox的isChecked的使用实例详解

Android 中CheckBox的isChecked的使用实例详解 范例说明 所有的网络服务在User使用之前,都需要签署同意条款,在手机应用程序.手机游戏的设计经验中,常看见CheckBox在同意条款情境的运用,其选取的状态有两种即isChecked=true与isChecked=false. 以下范例将设计一个TextView放入条款文字,在下方配置一个CheckBox Widget作为选取项,通过Button.onClickListener按钮事件处理,取得User同意条款的状态. 当C

Java编程之文件读写实例详解_java

本文实例讲述了Java编程中文件读写的方法.分享给大家供大家参考,具体如下: Java中文件读写操作的作用是什么? 回答这个问题时应该先想到的是Java只是一门语言,我们的一种使用工具而已,这样答案就明晰了,就是将外来的各种数据写入到某一个文件中去,用以保存下来:或者从文件中将其数据读取出来,供我们使用.就如下电影过程,从网络资源中下载一部电影保存于你电脑中(写文件),当你想看的时候就用播放器打开(读文件). Java中如何对文件进行读写操作? 先理一理,Java中的流分两种,字节流和字符流,其