Atributo Redirect


1Apresentação

Este atributo pode ser usado para forçar um redirecionamento, impedindo sistematicamente o acesso a um controlador ou uma ação. Isso pode ser útil durante a depuração, ou para desativar temporariamente o acesso a uma parte do código.


2Parâmetros

O atributo oferece vários parâmetros:

  • $url: (string) URL de redirecionamento.
  • $var: (string) Nome da variável de template contendo a URL de redirecionamento.
  • $referer: (bool) false por padrão. Se true, e $url e $var não estiverem definidos, o cabeçalho HTTP REFERER é usado como URL de redirecionamento.

3Prioridade

Para definir a URL para a qual o usuário será redirecionado, o atributo aplica a seguinte ordem de prioridade:

  1. Se o parâmetro $url estiver definido, ele é usado.
  2. Se o parâmetro $var estiver definido, e contiver o nome de uma variável de template existente e não vazia, seu conteúdo é usado.
  3. Se o parâmetro $referer estiver definido como true, e o cabeçalho HTTP Referer existir e não estiver vazio, ele é usado.
  4. Se o arquivo etc/temma.php contiver uma configuração estendida x-security, e esta contiver uma chave redirect, seu conteúdo é usado.

Se nenhuma URL de redirecionamento for encontrada, um erro 403 é retornado.


4Configuração

Para garantir que todos os atributos Redirect redirecionem para a mesma URL, basta defini-la no arquivo etc/temma.php:

<?php

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

Para garantir que a URL de redirecionamento seja a mesma para os atributos Auth, Method, Referer e Redirect, basta definir a chave redirect na configuração estendida x-security do arquivo etc/temma.php:

<?php

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

5Exemplos

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

// redireciona todos os acessos a este controlador
// para a URL definida no arquivo 'etc/temma.php'
#[TµRedirect]
class Login extends \Temma\Web\Controller {
    // ...
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // redireciona para a nova página inicial
    #[TµRedirect('/newHomepage')]
    public function oldHome() { }
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // inicialização do controlador: definição
    // da variável de template 'homeRedir'
    public function __wakeup() {
        $this['homeRedir'] = '/otherHomepage';
    }

    // redirecionamento para a URL definida na
    // variável de template 'homeRedir'
    #[TµRedirect(var: 'homeRedir')]
    public function action1() {
        // ...
    }
}
use \Temma\Attributes\Redirect as TµRedirect;

class Homepage extends \Temma\Web\Controller {
    // redireciona para o referer HTTP, ou para a
    // URL de configuração se o referer estiver ausente
    #[TµRedirect(referer: true)]
    public function action1() {
        // ...
    }
}