怎么创建mvc项目,mvc框架怎么建立
chanong
|重头戏即将来临
【路由分发】我去了上一章
开始创建您的第一个MVC 框架项目[1]
现在我们已经解释了项目的基本结构,现在我们将解释重点“路由的分发”。路由的目的是通过入口文件调用不同类的不同方法。那么我们现在就开始吧!
1. 接受URL参数(p平台参数、C控制器名称、方法名称)。 2. 使用平台参数(p)+控制器名称(c)创建对象并调用方法。谈话是廉价的。请给我看代码。让我们现在开始。代码
[代码] 在Core/App.php中创建一个getUrl静态方法。每次创建方法时,请务必在run 方法中调用它。
* 获取URL,做人性化大小写,设置默认值*/public static function getUrl(){ $GLOBALS['p']=isset($_GET['p']) ucfirst(strto lower($_GET [ ' p'])) :'返回'; $GLOBALS['c']=isset($_GET['c']) ucfirst(strto lower($_GET['c'])) :' $GLOBALS [ 'a ']=isset($_GET['a']) ucfirst(strto lower($_GET['a'])) :'showIndex';} 实例化上面定义的对象根据URL调用方法。
* 分发路由实例化对象并根据URL调用方法。 */public static function dispathRouter(){ //控制器规则为名称+ 控制器关键字$className='App\\'.$GLOBALS[' p'] .'\\Controller\\'.$GLOBALS[' c'] .'Controller'; $action=$GLOBALS['a']; $obj=new $className; $obj-$action();为什么我实际执行的时候会出现错误,检查一下可以看到没有class文件从头到尾都引入了除App.php之外的其他类,因此一旦运行上面的代码,就会显示一条消息,表明不存在该类。也就是说,重要的部分仍然缺失
[Autoload]/** *Autoload*/public static function autoload(){ //这里采用高阶函数的写法,只留下一个方法spl_autoload_register(function($className){$fileName=ROOT_PATH.str_replace ( ' \\ ','/',$className).'.php';if (file_exists($fileName)){ include_once $fileName; return true;}else{ echo '文件不存在!'; die;}Up 所以我们使用高阶函数,但是什么是高阶函数呢?这里我们来说说通用函数,通用函数的参数是什么?
String 2. Array 3. Object 高阶函数参数是可以将整个函数体作为参数的函数App/Back/Controller php/** * 不要忘记在* IndexController.php 中创建IndexController.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:23 */namespace App\Back\Controller;class IndexController{ public function showIndex() { }} 这样基本上就可以创建一个原型了
[Smarty] 让我们在您的项目中支持Smarty模板引擎
解压并将整个Smarty libs 文件夹复制到项目的Vendor 目录中,并将其重命名为Smarty。修改core/App.php自动加载Smarty [代码]/** * Autoload */public static function autoload( ) { //这里采用高阶函数的写法, spl_autoload_register(function($className){if ( $className=='Smarty'){ $fileName=VEND_PATH.'Smarty/'.str_replace( ' \\','/',$className).'.class.php' ;}else{ $fileName=ROOT_PATH.str_replace ('\\','/',$className).'.php';}if ( file_exists($fileName)){ include_once $fileName; return true;}else{ echo '文件不存在!'; die; } });}接下来,在Core中创建Controller.php,并让该类继承自\Smarty。
php/** * * Controller.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:32 */namespace Core; class Controller extends \Smarty{} 以后需要使用App目录下的Smarty所有类必须继承自控制器
php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: PM3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { }它还没有完成。开始配置Smarty模板路径和编译路径。核心控制器
php/** * * Controller.php * User: kalvin * Date: 2018/1/30 * Time: PM 3:32 */namespace Core; class Controller extends \Smarty{ public function __construct() {parent:__construct(); $templateDir=APP_PATH.$ GLOBALS['p'].'/'.'View';$this-template_dir=$templateDir;$this-compile_dir=ROOT_PATH.'Caching/'; }}我正在使用的Smarty 3已经放弃了setTemplateDir方法看起来只有一个template_dir 属性,您可以在视图中创建模板并使用display 来访问IndexController 中的模板。
php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: PM3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { $ this-display('hello.tpl'); }} 如果您发现我的文章有用或喜欢它,请不要忘记关注我。如果您喜欢,请转发。当然,如果可以的话我就给你奶茶钱作为奖励,你也可以的(#.#)