Por padrão, quando ocorre um erro de validação no FormRequest
no Laravel, o sistema redireciona para a rota anterior usando o método back()
. No entanto, se não houver uma requisição anterior, o redirecionamento levará o usuário à página inicial. Contudo, é possível personalizar o redirecionamento após falha de validação no FormRequest para apontar para uma rota específica.
Agora, é importante entender como isso funciona. Tudo começa na função getRedirectUrl()
dentro da classe pai FormRequest
. Vamos analisar esse processo mais de perto.
/**
* 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 procura no objeto FormRequest
um caminho para redirecionamento. Se todas as tentativas falharem, o sistema redireciona para a página anterior. Entretanto, você pode configurar $redirect
, $redirectRoute
ou $redirectAction
na sua classe FormRequest
para definir para onde o sistema deve redirecionar quando a requisição falhar. Basta configurar apenas uma dessas opções.
/**
* 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';
Quando você deseja redirecionar para uma rota ou ação de um controller que exige parâmetros, como ao editar um recurso, surgem algumas complicações. Por exemplo, se a validação do FormRequest
falhar durante a edição de um recurso, você precisará redirecionar de volta para a rota de edição daquele recurso específico. Usar $redirectRoute = 'casas.edit'
não funcionaria, já que essa rota exige o parâmetro ID.
Entretanto, você pode sobrescrever o método getRedirectUrl()
no FormRequest
para controlar o redirecionamento e passar os parâmetros necessários, como mostrado no código abaixo.
/**
* 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);
}
É essencial examinar o objeto $this->route()
na sua requisição (request) para identificar os parâmetros disponíveis e seus respectivos nomes. Dessa forma, você garante que o redirecionamento será feito corretamente para o recurso específico.
Conclusão
Compreender como o Laravel gerencia o redirecionamento após falha de validação no FormRequest é essencial para aprimorar a experiência do usuário. Ao configurar as propriedades $redirect
, $redirectRoute
e $redirectAction
, ou ao sobrescrever o método getRedirectUrl()
, você obtém controle total sobre o destino do redirecionamento, mesmo em cenários com parâmetros dinâmicos.
Além disso, ao explorar o objeto $this->route()
, você assegura o uso correto dos parâmetros, garantindo que o redirecionamento funcione da maneira desejada. Com essas práticas, você melhora a eficiência e a navegação da sua aplicação, oferecendo uma experiência mais fluida para os usuários.
Se quiser aprender mais sobre FormRequests, consulte a documentação oficial do Laravel para obter mais detalhes sobre validação e redirecionamento.