Учебники

CakePHP — Контроллеры

Контроллер, как следует из названия, управляет приложением. Он действует как мост между моделями и представлениями. Контроллеры обрабатывают данные запроса, следят за тем, чтобы вызывались правильные модели и отображался правильный ответ или представление. Методы в классе контроллеров называются действиями . Каждый контроллер следует соглашениям об именах. Имена классов 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 даст вам следующий вывод.

Перенаправление Action2

Загрузка моделей

В CakePHP модель можно загрузить с помощью метода loadModel () . Ниже приведен синтаксис метода loadModel ().

Синтаксис

Cake\Controller\Controller::loadModel(string $modelClass, string $type)

У приведенной выше функции есть два аргумента:

  • Первый аргумент — это название класса модели.

  • Второй аргумент — тип загружаемого репозитория.

Первый аргумент — это название класса модели.

Второй аргумент — тип загружаемого репозитория.

пример

Если вы хотите загрузить модель Articles в контроллер, то ее можно загрузить, написав следующую строку в действии контроллера.