1.接收url参数(p平台参数,c 控制器名 ,a 方法名)
2.通过平台参数(p)+控制器名 (c) 创建对象 并调用 a 方法
talk is cheep show me the code 我们现在开始写代码
[代码]
在Core/App.php中创建创建getUrl静态方法。记得每次写完方法都要在run方法中调用哦
* 获取url,做一些人性化处理首字母大写,并给予默认值 */public static function getUrl(){ $GLOBALS['p']=isset($_GET['p']) ? ucfirst(strtolower($_GET['p'])) :'Back'; $GLOBALS['c']=isset($_GET['c']) ? ucfirst(strtolower($_GET['c'])) :'Index'; $GLOBALS['a']=isset($_GET['a']) ? ucfirst(strtolower($_GET['a'])) :'showIndex'; }
根据上面定义的url实例化对象并调用方法
* 分发路由 根据url实例化对象并调用方法 */public static function dispathRouter(){ //我们的控制器的规则就是名字+Controller关键字 $className='App\\'.$GLOBALS['p'].'\\Controller\\'.$GLOBALS['c'].'Controller'; $action=$GLOBALS['a']; $obj=new $className; $obj->$action(); }
到了这里其实你们运行的时候会报错,为什么呢,因为如果你在查看就会发现我们从始至终并未引入过除App.php之外的任何类文件,所以以上代码一旦运行就会提示没有这个类文件。
所以我们现在还缺一个关键的零件
[自动加载]
/** * 自动加载 */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; } }); }
我们上面使用了高阶函数
什么是高阶函数 这里我们就要说一般的函数,一般函数参数有什么?
字符串2.数组3.对象
高阶函数的参数就是能把整个函数体作为参数的函数
别忘了还要在App/Back/Controller创建一个IndexController.php
<?php/** * * IndexController.php * User: kalvin * Date: 2018/1/30 * Time: 下午3:23 */namespace App\Back\Controller;class IndexController{ public function showIndex() { } }
这样我们就基本可以有一个雏形了
[Smarty]
我们现在来让我们的项目支持Smarty模板引擎
下载链接:Smarty
解压 把SMarty中的libs文件夹整个拷贝至项目的Vendor目录并更改名字为Smarty
更改core/App.php至让其能自动加载Smarty
[代码]
/** * 自动加载 */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: 下午3:32 */namespace Core;class Controller extends \Smarty{ }
以后在App目录下所有需要使用Smarty的类必须继承Controller
<?php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: 下午3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { } }
现在还不是很完美,我们开始配置Smarty模板路径与编译路径
Core里面的Controller
<?php/** * * Controller.php * User: kalvin * Date: 2018/1/30 * Time: 下午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 属性
我们可以再view创建模板,并在IndexController中使用display访问模板
<?php/** * * IndexController.class.php * User: kalvin * Date: 2018/1/30 * Time: 下午3:23 */namespace App\Back\Controller;use Core\Controller;class IndexController extends Controller{ public function showIndex() { $this->display('hello.tpl'); } }
如果觉得我的文章对你有帮助又或者喜欢,别忘了关注.喜欢加转发,当然如果可以打赏我一下奶茶钱也是可以的哦(#.#)
作者:秋名山吴师傅
链接:https://www.jianshu.com/p/56610364473a