时间:2021-07-01 10:21:17 帮助过:5人阅读
*/ class Controller { }
只有一个空类,等待添加内容。 再来看web中的
*/ 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.Bkjia.com,就可以看到跟之前一样的页面了。 我们来完善一下base中的Controller
*/ 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如下:
*/ 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); }
http://www.bkjia.com/PHPjc/1053351.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1053351.htmlTechArticle构建自己的PHP框架--抽象Controller的基类 我们将简单的路由解析和执行,从入口文件public/index.php中移入到框架中。入口文件顿时变得清爽无...