CakePHP - Contrôleurs

Le contrôleur comme son nom l'indique contrôle l'application. Il agit comme un pont entre les modèles et les vues. Les contrôleurs gèrent les données de demande, s'assurent que les modèles corrects sont appelés et que la bonne réponse ou vue est rendue.

Les méthodes de la classe des contrôleurs sont appelées actions. Chaque contrôleur suit les conventions de dénomination. Les noms de classe Controller sont au pluriel, Camel Cased, et se terminent par Controller -PostsController.

AppController

le AppConttrollerclass est la classe parente des contrôleurs de toutes les applications. Cette classe étend laControllerclasse de CakePHP. AppController est défini àsrc/Controller/AppController.php. Le fichier contient le code suivant.

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

AppControllerpeut être utilisé pour charger des composants qui seront utilisés dans chaque contrôleur de votre application. Les attributs et méthodes créés dans AppController seront disponibles dans tous les contrôleurs qui l'étendent. leinitialize() sera appelée à la fin du constructeur du contrôleur pour charger les composants.

Actions du contrôleur

Les méthodes de la classe de contrôleur sont appelées Actions. Ces actions sont responsables de l'envoi de la réponse appropriée au navigateur / utilisateur effectuant la demande. La vue est rendue par le nom de l'action, c'est-à-dire le nom de la méthode dans le contrôleur.

Exemple

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

Comme vous pouvez le voir dans l'exemple ci-dessus, le RecipesController a 3 actions - View, Partager et Search.

Redirection

Pour rediriger un utilisateur vers une autre action du même contrôleur, nous pouvons utiliser la méthode setAction (). Voici la syntaxe de la méthode setAction ().

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

Le code suivant redirigera l'utilisateur vers l'action d'indexation du même contrôleur.

$this->setAction('index');

L'exemple suivant montre l'utilisation de la méthode ci-dessus.

Exemple

Apportez des modifications au config/routes.php fichier comme indiqué dans le programme suivant.

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

Créer un RedirectsController.phpfichier à src / Controller / RedirectsController.php. Copiez le code suivant dans le fichier du contrôleur.

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

Créer un annuaire Redirects à src/Template et sous ce répertoire, créez un Viewfichier appelé action1.php. Copiez le code suivant dans ce fichier.

src/Template/Redirects/action1.php

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

Exécutez l'exemple ci-dessus en visitant l'URL suivante.

http: // localhost / cakephp4 / redirect-controller

Production

Lors de l'exécution, vous recevrez la sortie suivante.

Maintenant, visitez l'URL suivante: http: // localhost / cakephp4 / redirect-controller2

L'URL ci-dessus vous donnera la sortie suivante.

Chargement des modèles

Dans CakePHP, un modèle peut être chargé en utilisant le loadModel()méthode. Voici la syntaxe duloadModel() méthode -

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

Il y a deux arguments à la fonction ci-dessus comme suit -

  • Le premier argument est le nom de la classe modèle.

  • Le deuxième argument est le type de référentiel à charger.

Exemple

Si vous souhaitez charger le modèle Articles dans un contrôleur, il peut être chargé en écrivant la ligne suivante dans l'action du contrôleur.

$this->loadModel('Articles');