Atributo Redirect


1Presentación

Este atributo puede usarse para forzar una redirección, impidiendo sistemáticamente el acceso a un controlador o una acción. Esto puede ser útil durante la depuración, o para desactivar temporalmente el acceso a una parte del código.


2Parámetros

El atributo ofrece varios parámetros:

  • $url: (string) URL de redirección.
  • $var: (string) Nombre de la variable de template que contiene la URL de redirección.
  • $referer: (bool) false por defecto. Si es true, y $url y $var no están definidos, se usa la cabecera HTTP REFERER como URL de redirección.

3Prioridad

Para definir la URL a la que se redirigirá al usuario, el atributo aplica el siguiente orden de prioridad:

  1. Si el parámetro $url está definido, se usa.
  2. Si el parámetro $var está definido, y contiene el nombre de una variable de template existente y no vacía, se usa su contenido.
  3. Si el parámetro $referer está definido como true, y la cabecera HTTP Referer existe y no está vacía, se usa.
  4. Si el archivo etc/temma.php contiene una configuración extendida x-security, y esta contiene una clave redirect, se usa su contenido.

Si no se encuentra ninguna URL de redirección, se devuelve un error 403.


4Configuración

Para asegurarte de que todos los atributos Redirect redirijan a la misma URL, basta con definirla en el archivo etc/temma.php:

<?php

return [
    'x-security' => [
        'redirect' => '/temporaryHomepage'
    ]
];

Para asegurarte de que la URL de redirección sea la misma para los atributos Auth, Method, Referer y Redirect, basta con definir la clave redirect en la configuración extendida x-security del archivo etc/temma.php:

<?php

return [
    'x-security' => [
        'redirect' => '/login'
    ]
];

5Ejemplos

use \Temma\Attributes\Redirect as TµRedirect;

// redirige todos los accesos a este controlador
// a la URL definida en el archivo 'etc/temma.php'
#[TµRedirect]
class Login extends \Temma\Web\Controller {
    // ...
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // redirige a la nueva página de inicio
    #[TµRedirect('/newHomepage')]
    public function oldHome() { }
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // inicialización del controlador: definición de
    // la variable de template 'homeRedir'
    public function __wakeup() {
        $this['homeRedir'] = '/otherHomepage';
    }

    // redirección a la URL definida en la
    // variable de template 'homeRedir'
    #[TµRedirect(var: 'homeRedir')]
    public function action1() {
        // ...
    }
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // redirige al referer HTTP, o a la URL de
    // configuración si el referer no está presente
    #[TµRedirect(referer: true)]
    public function action1() {
        // ...
    }
}