首页 >

构建自己的PHP框架--抽象Controller的基类

php教程|php手册构建自己的PHP框架--抽象Controller的基类
nbsp,controller,39,gt,public
php教程-php手册
我们将简单的路由解析和执行,从入口文件public/index.php中移入到框架中。入口文件顿时变得清爽无比~~
unix源码下载,vscode修改字体风格,ubuntu 14.,判断网站是tomcat,HABA爬虫,php 经典书籍,福建抖音seo软件,织梦网站导航位置设置,建站之星免费模板lzw
但是,去我们的controller里看一下,会看到如下的code:
易语言外挂源码网站,ubuntu 公私钥生成,第三方集成Tomcat日志,爬虫训练营,大学生php实训心得报告,seo手机搜索lzw
public function actionView()
源码端购买,vscode 搭建rn环境,ubuntu 构建_主页,tomcat正在启动服务,sqlite做历史数据保存,java爬虫英文商品信息和图片,smarty 执行php,巢湖正规的seo优化,那个合买彩票网站,dede模板没有数据备份lzw
{

$body = ‘Test body information’;

require ‘../views/site/view.php’;

}

难道我们每写一个要去渲染页面的action,都要去找相应路径的view,然后把它require进来。肯定不能这样,所以我们要抽象出一个Controller的基类,实现一个渲染页面的方法,让其他的controller继承,就可以使用相应的方法。

不用说,这个controller的基类肯定要写到框架里。而且也要写两个,一个放在base中,一个放在web中,web中的Controller继承base中的。

先来看在base中的

<?phpnamespace sf\base;/** * Controller is the base class for classes containing controller logic. * @author Harry Sun  */class Controller{}

只有一个空类,等待添加内容。

再来看web中的

<?phpnamespace sf\web;/** * Controller is the base class for classes containing controller logic. * @author Harry Sun  */class Controller extends \sf\base\Controller{    /**     * Renders a view     * @param string $view the view name.     * @param array $params the parameters (name-value pairs) that should be made available in the view.     */    public function render($view, $params = [])    {        extract($params);        return require '../views/' . $view . '.php';    }}

可以看到,我们首先从数组中把变量导入到当前的符号表中,然后引入相应的view页面。

然后,在SiteController,我们只需要这么写就可以了。

render('site/view', ['body' => 'Test body information']);    }} 

然后,访问www.2cto.com,就可以看到跟之前一样的页面了。

我们来完善一下base中的Controller

<?phpnamespace sf\base;/** * Controller is the base class for classes containing controller logic. * @author Harry Sun  */class Controller{    /**     * @var string the ID of this controller.     */    public $id;    /**     * @var Action the action that is currently being executed.     */    public $action;}

添加了两个属性,分别来记录当前的controller和action。

然后,我们要在解析router之后,将其赋值,code如下:

<?phpnamespace sf\web;/** * Application is the base class for all application classes. * @author Harry Sun  */class Application extends \sf\base\Application{    /**     * Handles the specified request.     * @return Response the resulting response     */    public function handleRequest()    {        $router = $_GET['r'];        list($controllerName, $actionName) = explode('/', $router);        $ucController = ucfirst($controllerName);        $controllerNameAll = $this->controllerNamespace . '\\' . $ucController . 'Controller';        $controller = new $controllerNameAll();        $controller->id = $controllerName;        $controller->action = $actionName;        return call_user_func([$controller, 'action'. ucfirst($actionName)]);    }}

然后我们就可以在controller和view中拿到相应的controller名字和action名字了,将view.php修改如下:

            title                id;?>
action;?>

然后我们就可以看到如下的页面了

有人觉得现在大家都前后端分离了,我们不需要用PHP去render一个页面,只需要返回一个josn字符串就好了,这个就更简单了,在web的Controller中添加一个toJson方法即可

    /**     * Convert a array to json string     * @param string $data     */    public function toJson($data)    {        if (is_string($data)) {            return $data;        }        return json_encode($data);    }

将SiteController中的actionTest,修改如下:

public function actionTest()

{

$data = [‘first’ => ‘awesome-php-zh_CN’, ‘second’ => ‘simple-framework’];

echo $this->toJson($data);

}


构建自己的PHP框架--抽象Controller的基类
  • Zend Framework教程之MVC框架的Controller用法分析,zendmvc
  • Zend Framework教程之MVC框架的Controller用法分析,zendmvc | Zend Framework教程之MVC框架的Controller用法分析,zendmvc ...

    构建自己的PHP框架--抽象Controller的基类
  • yii框架源码分析之创建controller代码
  • yii框架源码分析之创建controller代码 | yii框架源码分析之创建controller代码 ...

    构建自己的PHP框架--抽象Controller的基类
  • 自己写MVC 仍是用现成的
  • 自己写MVC 仍是用现成的 | 自己写MVC 仍是用现成的 ...