控制器(Controllers)
名称控制器指示控制应用程序。 它就像模型和视图之间的桥梁。 控制器处理请求数据,确保调用正确的模型并呈现正确的响应或视图。 控制器类中的方法称为actions 。 每个控制器遵循命名约定。 Controller类名称采用复数形式,Camel Cased,以Controller - PostsController 。
AppController (AppController)
AppConttroller类是所有应用程序控制器的父类。 该类扩展了CakePHP的Controller类。 AppController在src/Controller/AppController.php定义。 该文件包含以下代码。
<?php
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
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()方法来加载组件。
控制器动作
控制器类中的方法称为Actions。 操作负责为发出请求的浏览器/用户发送适当的响应。 视图由操作名称呈现,即控制器中方法的名称。
例子 (Example)
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 。
重定向(Redirecting)
为了将用户重定向到同一控制器的另一个动作,我们可以使用setAction()方法。 以下是setAction()方法的语法 -
语法 (Syntax)
Cake\Controller\Controller::setAction($action, $args...)
以下代码将用户重定向到同一控制器的索引操作。
$this->setAction('index');
以下示例显示了上述方法的用法。
例子 (Example)
在config/routes.php文件中进行更改,如以下程序所示。
config/routes.php
<?php
use Cake\Core\Plugin;
use Cake\Routing\RouteBuilder;
use Cake\Routing\Router;
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上创建一个RedirectsController.php文件。 将以下代码复制到控制器文件中。
src/Controller/RedirectsController.php
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
use Cake\Datasource\ConnectionManager;
class RedirectsController extends AppController{
public function action1(){
}
public function action2(){
echo "redirecting from action2";
$this->setAction('action1');
}
}
?>
创建目录Redirects到src/Template并在该目录下创建一个名为action1.ctp的View文件。 复制该文件中的以下代码。
src/Template/Redirects/action1.ctp
This is an example of how to redirect within controller.
通过访问以下URL执行上述示例。
http://localhost:85/CakePHP/redirect-controller
输出 (Output)
执行后,您将收到以下输出。
现在,访问以下URL - http://localhost:85/CakePHP/redirect-controller2
上面的URL将为您提供以下输出。
加载模型
在CakePHP中,可以使用loadModel()方法加载模型。 以下是loadModel()方法的语法。
语法 (Syntax)
Cake\Controller\Controller::loadModel(string $modelClass, string $type)
上述功能有两个参数 -
第一个参数是模型类的名称。
第二个参数是要加载的存储库的类型。
例子 (Example)
如果要在控制器中加载Articles模型,则可以通过在控制器的操作中写入以下行来加载它。
$this->loadModel('Articles');