LARAVEL::FormRequest – Redirecionamento ao falhar validação

Logo Laravel

Por padrão quando ocorre um erro de validação no FormRequest no Laravel, ele simplesmente irá redirecionar para trás back().
Se não há uma requisição anterior, você vai acabar na página home. Mas você pode manipular para onde ser redirecionado! Como funciona?
Tudo começa na função getRedirectUrl() na classe pai FormRequest. Vamos dar uma olhada:


/**
 * Get the URL to redirect to on a validation error.
 *
 * @return string
 */
protected function getRedirectUrl()
{
    $url = $this->redirector->getUrlGenerator();

    if ($this->redirect)
    {
        return $url->to($this->redirect);
    }
    elseif ($this->redirectRoute)
    {
        return $url->route($this->redirectRoute);
    }
    elseif ($this->redirectAction)
    {
        return $url->action($this->redirectAction);
    }
    return $url->previous();
}

Este método vai procurar no objeto FormRequest por um caminho para redirecionar. Se tudo falhar, ele manda para página anterior. Então com você pode configurar $redirect, $redirectRoute ou $redirectAction na sua classe FormRequest e definir para onde será redirecionado quando a requisição falhar. Claro, será necessário configurar apenas um deles.


/**
 * The URI to redirect to if validation fails.
 *
 * @var string
 */
protected $redirect = 'login';

/**
 * The route to redirect to if validation fails.
 *
 * @var string
 */
protected $redirectRoute = casas.create';

/**
 * The controller action to redirect to if validation fails.
 *
 * @var string
 */
protected $redirectAction = 'CasaController@create';

Onde complica um pouco é se você quiser redirecionar para uma rota ou uma action de um controller, informando parâmetros. Por exemplo, se estiver editando um recurso e a validação do FormRequest falhar. Neste caso você vai querer redirecionar para trás, mas para a rota de edição daquele recurso específico. Então não daria para você fazer assim $redirectRoute = ‘casas.edit’. Porque esta rota vai exigir de você o parâmertro Id.
Mas você poderá sobrescrever o método getRedirectUrl() no seu FormRequest e controlar o caminho que será redirecionado, passando os parâmetros desta maneira:


/**
 * Get the URL to redirect to on a validation error.
 *
 * @return string
 */
protected function getRedirectUrl()
{
    $url = $this->redirector->getUrlGenerator();

    $casa = $this->route()->parameter('casas');

    return $url->route('admin.casas.edit', $casa);
}

Vale a pena dar uma examinada no objeto $this->route() na sua requisição (request) para ver quais parâmetros estão disponíveis e (quais são os nomes deles) para buscar o correto e redirecionar corretamente.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.