CakePHP的控制器
控制器顾名思义控制应用程序。它就像模型和视图之间的桥梁。控制器处理请求数据,确保调用正确的模型、响应或视图。控制器的类中的方法被称为行为 。每个控制器遵循以下命名规格。控制器类名是复数形式,驼峰结构,并以Controller结束-如:PostsController。
AppController
AppConttroller类是所有应用程序控制器的父类。该类扩展至CakePHP的Controller类。 AppController在src/Controller/AppController.php中定义。该文件包含下面的代码。
<?php
namespace AppController;
use CakeControllerController;
use CakeEventEvent;
class AppController extends Controller{
public function initialize(){
parent::initialize();
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
}
public function beforeRender(Event $event){
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', application/xml'])) {
$this->set('_serialize', true);
}
}
}
AppController可以用来加载在你的应用程序的每个控制器中会使用到的组件。在AppController中创建的属性和方法可以在扩展至它的所有控制器中使用。initialize()方法将在构造函数的末尾被调用来加载组件。
控制器行为
控制器类中的方法被称为行为。行为负责给发出请求的浏览器/用户发送适当的响应。试图通过行为来展现,或者说通过控制器的方法来展现。
例
class RecipesController extends AppController{
public function view($id){
// Action logic goes here.
}
public function share($customerId, $recipeId){
// Action logic goes here.
}
public function search($query){
// Action logic goes here.
}
}
正如你可以在上面的例子中看到的,RecipesController具有3种行为- view,share和search 。
重定向
要重定向用户到相同控制器的另一个行为,我们可以使用的setAction()方法。以下是用于setAction()方法的语法 -
CakeControllerController::setAction($action, $args...)
下面的代码将用户重定向到同一控制器的index行为。
$this->setAction('index');
以下示例显示了上述方法的使用。
例
在以下项目中,修改如下config/routes.php文件。
config/routes.php文件
<?php
use CakeCorePlugin;
use CakeRoutingRouteBuilder;
use CakeRoutingRouter;
Router::defaultRouteClass('DashedRoute');
Router::scope('/', function (RouteBuilder $routes) {
$routes->connect('/redirectcontroller',['
controller'=>'Redirects','action'=>'action1']);
$routes->connect('/redirectcontroller2',['
controller'=>'Redirects','action'=>'action2']);
$routes->fallbacks('DashedRoute');
});
Plugin::routes();
在src/Controller/下创建RedirectsController.php文件。复制以下代码至其中。
src/Controller/RedirectsController.php
<?php
namespace AppController;
use AppControllerAppController;
use CakeORMTableRegistry;
use CakeDatasourceConnectionManager;
class RedirectsController extends AppController{
public function action1(){
}
public function action2(){
echo "redirecting from action2";
$this->setAction('action1');
}
}
?>
在src/Template目录下创建一个Redirects目录,在此Redirects目录下创建一个名为action1.ctp一个视图(View)文件。复制以下代码至其中。
src/Template/Redirects/action1.ctp
This is an example of how to redirect within controller.
通过访问以下网址执行上面的例子。
http://localhost:85/CakePHP/redirect-controller
输出
执行后,您会看到以下输出。

现在,请访问以下网址- http://localhost:85/CakePHP/redirect-controller2
上述网址会产生以下输出。
加载模型
在CakePHP中,一个模型可以使用loadModel()方法来加载。以下使用loadModel()方法的语法。
语法
CakeControllerController::loadModel(string $modelClass, string $type)
上面的函数有两个参数-
第一个参数是模型类的名字。
第二个参数是需要加载的库的类型。
例
如果要在控制器中加载文章模型,那么可以通过给控制器的行为添加以下代码进行加载。
$this->loadModel('Articles');

免费 AI IDE



更多建议: