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
共同学习,写下你的评论
评论加载中...
作者其他优质文章
