CakePHP - Controladores
El controlador como su nombre lo indica controla la aplicación. Actúa como un puente entre modelos y vistas. Los controladores manejan los datos de la solicitud, se asegura de que se llamen a los modelos correctos y se muestre la respuesta o vista correctas.
Los métodos en la clase de los controladores se llaman actions. Cada controlador sigue las convenciones de nomenclatura. Los nombres de las clases del controlador están en plural, Camel Cased y terminan en Controller -PostsController.
AppController
los AppConttrollerclass es la clase principal de los controladores de todas las aplicaciones. Esta clase extiende elControllerclase de CakePHP. AppController se define ensrc/Controller/AppController.php. El archivo contiene el siguiente 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');
}
}
AppControllerse puede utilizar para cargar componentes que se utilizarán en todos los controladores de su aplicación. Los atributos y métodos creados en AppController estarán disponibles en todos los controladores que lo amplíen. losinitialize() El método se invocará al final del constructor del controlador para cargar componentes.
Acciones del controlador
Los métodos de la clase de controlador se denominan Acciones. Estas acciones son responsables de enviar la respuesta adecuada para el navegador / usuario que realiza la solicitud. La vista se representa por el nombre de la acción, es decir, el nombre del método en el controlador.
Ejemplo
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 puede ver en el ejemplo anterior, el RecipesController tiene 3 acciones - View, Compartir y Search.
Redireccionando
Para redirigir a un usuario a otra acción del mismo controlador, podemos usar el método setAction (). La siguiente es la sintaxis del método setAction ().
Cake\Controller\Controller::setAction($action, $args...)
El siguiente código redirigirá al usuario a la acción de índice del mismo controlador.
$this->setAction('index');
El siguiente ejemplo muestra el uso del método anterior.
Ejemplo
Realice cambios en el config/routes.php archivo como se muestra en el siguiente programa.
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();
});
Crear un RedirectsController.phparchivo en src / Controller / RedirectsController.php. Copie el siguiente código en el archivo del 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');
}
}
Crea un directorio Redirects a src/Template y bajo ese directorio crea un Viewarchivo llamado action1.php. Copie el siguiente código en ese archivo.
src/Template/Redirects/action1.php
<h1>This is an example of how to redirect within controller.</h1>
Ejecute el ejemplo anterior visitando la siguiente URL.
http: // localhost / cakephp4 / redirect-controller
Salida
Tras la ejecución, recibirá el siguiente resultado.
Ahora, visite la siguiente URL: http: // localhost / cakephp4 / redirect-controller2
La URL anterior le dará el siguiente resultado.
Carga de modelos
En CakePHP, un modelo se puede cargar usando el loadModel()método. La siguiente es la sintaxis paraloadModel() método -
Cake\Controller\Controller::loadModel(string $modelClass, string $type)
Hay dos argumentos para la función anterior de la siguiente manera:
El primer argumento es el nombre de la clase modelo.
El segundo argumento es el tipo de repositorio a cargar.
Ejemplo
Si desea cargar el modelo de artículos en un controlador, puede cargarlo escribiendo la siguiente línea en la acción del controlador.
$this->loadModel('Articles');