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');