CakePHP - Controladores

O controlador conforme o nome indica controla o aplicativo. Ele atua como uma ponte entre modelos e visualizações. Os controladores lidam com os dados da solicitação, garantem que os modelos corretos sejam chamados e a resposta ou visualização correta seja renderizada.

Métodos na classe dos controladores são chamados actions. Cada controlador segue convenções de nomenclatura. Os nomes das classes do Controlador estão no plural, Camel Cased, e terminam em Controlador -PostsController.

AppController

o AppConttrollerclass é a classe pai de todos os controladores de aplicativos. Esta classe estende oControllerclasse do CakePHP. AppController é definido emsrc/Controller/AppController.php. O arquivo contém o seguinte código.

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

AppControllerpode ser usado para carregar componentes que serão usados ​​em cada controlador de seu aplicativo. Os atributos e métodos criados no AppController estarão disponíveis em todos os controladores que o estendem. oinitialize() método será chamado no final do construtor do controlador para carregar os componentes.

Ações do controlador

Os métodos da classe do controlador são chamados de Ações. Essas ações são responsáveis ​​por enviar a resposta apropriada para o navegador / usuário que faz a solicitação. A visualização é renderizada pelo nome da ação, ou seja, o nome do método no controlador.

Exemplo

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

Como você pode ver no exemplo acima, o RecipesController tem 3 ações - View, Compartilhar e Search.

Redirecionando

Para redirecionar um usuário para outra ação do mesmo controlador, podemos usar o método setAction (). A seguir está a sintaxe do método setAction ().

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

O código a seguir redirecionará o usuário para a ação de índice do mesmo controlador.

$this->setAction('index');

O exemplo a seguir mostra o uso do método acima.

Exemplo

Faça alterações no config/routes.php arquivo conforme mostrado no programa a seguir.

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();
});

Criar uma RedirectsController.phparquivo em src / Controller / RedirectsController.php. Copie o código a seguir no arquivo do controlador.

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

Crie um diretório Redirects em src/Template e sob esse diretório crie um Viewarquivo chamado action1.php. Copie o código a seguir nesse arquivo.

src/Template/Redirects/action1.php

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

Execute o exemplo acima visitando o seguinte URL.

http: // localhost / cakephp4 / redirect-controller

Resultado

Após a execução, você receberá a seguinte saída.

Agora, visite o seguinte URL: http: // localhost / cakephp4 / redirect-controller2

O URL acima fornecerá a seguinte saída.

Carregando modelos

No CakePHP, um modelo pode ser carregado usando o loadModel()método. A seguir está a sintaxe para oloadModel() método -

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

Existem dois argumentos para a função acima, como segue -

  • O primeiro argumento é o nome da classe do modelo.

  • O segundo argumento é o tipo de repositório a ser carregado.

Exemplo

Se você deseja carregar o modelo de artigos em um controlador, ele pode ser carregado escrevendo a seguinte linha na ação do controlador.

$this->loadModel('Articles');