CakePHP - kontrolery

Kontroler jak nazwa wskazuje steruje aplikacją. Działa jak pomost między modelami i widokami. Kontrolery obsługują dane żądań, upewniają się, że wywoływane są prawidłowe modele i renderowana jest właściwa odpowiedź lub widok.

Wywoływane są metody z klasy kontrolerów actions. Każdy kontroler przestrzega konwencji nazewnictwa. Nazwy klas kontrolera są w liczbie mnogiej, w rozmiarze Camel i kończą się na Controller -PostsController.

AppController

Plik AppConttrollerclass jest klasą nadrzędną wszystkich kontrolerów aplikacji. Ta klasa rozszerzaControllerklasa CakePHP. AppController jest zdefiniowany wsrc/Controller/AppController.php. Plik zawiera następujący kod.

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Controller\Controller;
class AppController extends Controller {
   public function initialize(): void {
      parent::initialize();
      $this->loadComponent('RequestHandler');
      $this->loadComponent('Flash');
   }
}

AppControllermoże być używany do ładowania komponentów, które będą używane w każdym kontrolerze Twojej aplikacji. Atrybuty i metody utworzone w AppController będą dostępne we wszystkich kontrolerach, które go rozszerzają. Plikinitialize() zostanie wywołana na końcu konstruktora kontrolera w celu załadowania komponentów.

Akcje kontrolera

Metody w klasie kontrolera noszą nazwę Actions. Działania te są odpowiedzialne za wysłanie odpowiedniej odpowiedzi do przeglądarki / użytkownika wysyłającego żądanie. Widok jest renderowany przez nazwę akcji, czyli nazwę metody w kontrolerze.

Przykład

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.
   }
}

Jak widać w powyższym przykładzie, plik RecipesController ma 3 akcje - View, Udostępnij i Search.

Przekierowanie

W celu przekierowania użytkownika do innej akcji tego samego kontrolera możemy skorzystać z metody setAction (). Poniżej przedstawiono składnię metody setAction ().

Cake\Controller\Controller::setAction($action, $args...)

Poniższy kod przekieruje użytkownika do akcji indeksowania tego samego kontrolera.

$this->setAction('index');

Poniższy przykład pokazuje użycie powyższej metody.

Przykład

Wprowadź zmiany w config/routes.php plik, jak pokazano w następującym programie.

config/routes.php

<?php
use Cake\Http\Middleware\CsrfProtectionMiddleware;
use Cake\Routing\Route\DashedRoute;
use Cake\Routing\RouteBuilder;
$routes->setRouteClass(DashedRoute::class);
$routes->scope('/', function (RouteBuilder $builder) {
   // Register scoped middleware for in scopes.
   $builder->registerMiddleware('csrf', new CsrfProtectionMiddleware([
      'httpOnly' => true,
   ]));
   $builder->applyMiddleware('csrf'); 
   $builder->connect('/redirect-controller',['controller'=>'Redirects','action'=>'action1']);
   $builder->connect('/redirect-controller2',['controller'=>'Redirects','action'=>'action2']);
   $builder->fallbacks();
});

Stwórz RedirectsController.phpplik w src / Controller / RedirectsController.php. Skopiuj następujący kod w pliku kontrolera.

src/Controller/RedirectsController.php

<?php
declare(strict_types=1);
namespace App\Controller;
use Cake\Core\Configure;
use Cake\Http\Exception\ForbiddenException;
use Cake\Http\Exception\NotFoundException;
use Cake\Http\Response;
use Cake\View\Exception\MissingTemplateException;
class RedirectsController extends AppController {
   public function action1() {
   }
   public function action2(){
      echo "redirecting from action2";
      $this->setAction('action1');
   }
}

Utwórz katalog Redirects w src/Template iw tym katalogu utwórz plik Viewplik o nazwie action1.php. Skopiuj następujący kod w tym pliku.

src/Template/Redirects/action1.php

<h1>This is an example of how to redirect within controller.</h1>

Wykonaj powyższy przykład, odwiedzając następujący adres URL.

http: // localhost / cakephp4 / redirect-controller

Wynik

Po wykonaniu otrzymasz następujące dane wyjściowe.

Teraz odwiedź następujący adres URL: http: // localhost / cakephp4 / redirect-controller2

Powyższy adres URL daje następujące wyniki.

Ładowanie modeli

W CakePHP model można załadować za pomocą loadModel()metoda. Poniżej znajduje się składnialoadModel() metoda -

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

Powyższa funkcja ma dwa argumenty w następujący sposób -

  • Pierwszym argumentem jest nazwa klasy modelu.

  • Drugim argumentem jest typ repozytorium do załadowania.

Przykład

Jeśli chcesz załadować model artykułów do kontrolera, możesz go załadować, wpisując następujący wiersz w akcji kontrolera.

$this->loadModel('Articles');