Redirecionamento após falha de validação no FormRequest

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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima