Контроллер, как следует из названия, управляет приложением. Он действует как мост между моделями и представлениями. Контроллеры обрабатывают данные запроса, следят за тем, чтобы вызывались правильные модели и отображался правильный ответ или представление. Методы в классе контроллеров называются действиями . Каждый контроллер следует соглашениям об именах. Имена классов Controller представлены во множественном числе, с верблюжьим регистром и оканчиваются на Controller — PostsController .
AppController
Класс AppConttroller является родительским классом контроллеров всех приложений. Этот класс расширяет класс Controller CakePHP. 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 () будет вызываться в конце конструктора контроллера для загрузки компонентов.
Действия контроллера
Методы в классе контроллера называются действиями. Действия ответственны за отправку соответствующего ответа для браузера / пользователя, делающего запрос. Представление отображается именем действия, т. Е. Именем метода в контроллере.
пример
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 действия — « Просмотр», «Поделиться» и « Поиск» .
Перенаправление
Для перенаправления пользователя на другое действие того же контроллера мы можем использовать метод setAction (). Ниже приведен синтаксис метода setAction ():
Синтаксис
Cake\Controller\Controller::setAction($action, $args...)
Следующий код перенаправит пользователя на индекс действия того же контроллера.
$this->setAction('index');
В следующем примере показано использование вышеуказанного метода.
пример
Внесите изменения в файл config / rout.php, как показано в следующей программе.
конфиг / 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();
Создайте файл RedirectsController.php в src / Controller / 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 и в этом каталоге создайте файл View с именем action1.ctp . Скопируйте следующий код в этот файл.
SRC / Template / Перенаправление / action1.ctp
This is an example of how to redirect within controller.
Выполните приведенный выше пример, посетив следующий URL.
HTTP: // локальный: 85 / CakePHP / переадресовать-контроллер
Выход
После выполнения вы получите следующий вывод.
Теперь посетите следующий URL — http: // localhost: 85 / CakePHP / redirect-controller2
Приведенный выше URL даст вам следующий вывод.
Загрузка моделей
В CakePHP модель можно загрузить с помощью метода loadModel () . Ниже приведен синтаксис метода loadModel ().
Синтаксис
Cake\Controller\Controller::loadModel(string $modelClass, string $type)
У приведенной выше функции есть два аргумента:
-
Первый аргумент — это название класса модели.
-
Второй аргумент — тип загружаемого репозитория.
Первый аргумент — это название класса модели.
Второй аргумент — тип загружаемого репозитория.
пример
Если вы хотите загрузить модель Articles в контроллер, то ее можно загрузить, написав следующую строку в действии контроллера.