¿Qué son los controladores?

Los controladores son simplemente unos archivos de clase que manejan una solicitud HTTP. El enrutamiento de URI asocia un URI con un controlador. Además, los controladores son el corazón de su aplicación, ya que determinan cómo se deben manejar las solicitudes HTTP.

Cada controlador que cree debe extender la clase BaseController. Esta clase proporciona varias características que están disponibles para todos sus controladores.

Constructor

El controlador de CodeIgniter tiene un constructor especial initController(). Este será llamado por el marco después de la ejecución __construct() del constructor de PHP.

Si desea anular el initController(), no olvide agregar el método :parent::initController($request, $response, $logger);

<?php
namespace App\Controllers;
use CodeIgniter\HTTP\RequestInterface;
use CodeIgniter\HTTP\ResponseInterface;
use Psr\Log\LoggerInterface;
class Product extends BaseController
{
public function initController(
RequestInterface $request,
ResponseInterface $response,
LoggerInterface $logger
) {
parent::initController($request, $response, $logger);
// Add your code here.
}
// ...
}

Propiedades incluidas en los controladores

El controlador de CodeIgniter proporciona estas propiedades.

  • Objeto de solicitud: La instancia de solicitud principal de la aplicación siempre está disponible como una propiedad de clase $this->request
  • Objeto de respuesta: La instancia de respuesta principal de la aplicación siempre está disponible como una propiedad de clase $this->response
  • Objeto registrador: Una instancia de la clase Logger$this->logger está disponible como propiedad de clase.

Ayudantes

Puede definir una matriz de archivos auxiliares como una propiedad de clase. Cada vez que se cargue el controlador, estos archivos de ayuda se cargarán automáticamente en la memoria para que pueda usar sus métodos en cualquier lugar dentro del controlador:

<?php
namespace App\Controllers;
class MyController extends BaseController
{
protected $helpers = ['url', 'form'];
}

forceHTTPS

Un método conveniente para forzar el acceso a un método a través de HTTPS está disponible en todos los controladores:

<?php
if (! $this->request->isSecure()) {
$this->forceHTTPS();
}

De forma predeterminada, y en los navegadores modernos que admiten el encabezado HTTP Strict Transport Security, esta llamada debería obligar al navegador a convertir las llamadas que no son HTTPS en llamadas HTTPS durante un año. Puede modificar esto pasando la duración (en segundos) como el primer parámetro:

<?php
if (! $this->request->isSecure()) {
$this->forceHTTPS(31536000); // one year
}

Validando Datos

$this->validate()

Para simplificar la verificación de datos, el controlador también proporciona el método de conveniencia validate(). El método acepta una matriz de reglas en el primer parámetro y, en el segundo parámetro opcional, una matriz de mensajes de error personalizados para mostrar si los elementos no son válidos.

Internamente, esto utiliza la instancia $this->request del controlador para validar los datos. Los documentos de la biblioteca de validación tienen detalles sobre los formatos de matriz de reglas y mensajes, así como las reglas disponibles:

<?php
namespace App\Controllers;
class UserController extends BaseController
{
public function updateUser(int $userID)
{
if (! $this->validate([
'email' => "required|is_unique[users.email,id,{$userID}]",
'name'  => 'required|alpha_numeric_spaces',
])) {
return view('users/update', [
'errors' => $this->validator->getErrors(),
]);
}
// do something here if successful...
}
}

Si le resulta más sencillo mantener las reglas en el archivo de configuración, puede reemplazar la $rules matriz con el nombre del grupo como se define en Config\Validation.php:


<?php
namespace App\Controllers;
class UserController extends BaseController
{
public function updateUser(int $userID)
{
if (! $this->validate('userRules')) {
return view('users/update', [
'errors' => $this->validator->getErrors(),
]);
}
// do something here if successful...
}
}

$this->validateData()

A veces, es posible que desee verificar los parámetros del método del controlador u otros datos personalizados. En ese caso, puede utilizar el método $this->validateData(). El método acepta una matriz de datos para validar en el primer parámetro:

<?php
namespace App\Controllers;
class StoreController extends BaseController
{
public function product(int $id)
{
$data = [
'id'   => $id,
'name' => $this->request->getVar('name'),
];
$rule = [
'id'   => 'integer',
'name' => 'required|max_length[255]',
];
if (! $this->validateData($data, $rule)) {
// ...
}
// ...
}
}

Métodos de protección

En algunos casos, es posible que desee ocultar ciertos métodos del acceso público. Para lograr esto, simplemente declare el método como private o protected. Eso evitará que sea atendido por una solicitud de URL.

Por ejemplo, si tuviera que definir un método como este para el Helloworld controlador:

<?php
namespace App\Controllers;
class Products extends BaseController
{
protected function utility()
{
// some code
}
}

Y para definir una ruta (helloworld/utitilty) para el método, entonces intentar acceder a él usando la siguiente URL no funcionará:

example.com/index.php/helloworld/utility

El enrutamiento automático tampoco funcionará.

https://aprendeinformaticas.com/

https://codeigniter.com/user_guide/incoming/controllers.html