Rota Laravel com variável na url
-
21-12-2019 - |
Pergunta
Estou tentando implementar a lógica de redefinição de senha.O usuário recebe o link para redefinir a senha no e-mail.O URL parece
http://example.com/reset/resetcode
Tenho a rota definida para isso:
Route::get('reset/{resetcode}', function(){
return View::make('users.reset_password');
});
O formulário é renderizado na visualização para enviar o email, new password
etc.Para a postagem do formulário tenho rota definida como:
Route::post('reset/{resetcode}', array( 'as' => 'reset', 'uses' => 'UserController@passwordReset'));
eu pego o resetcode
de post route
dentro de passwordReset
controlador abaixo
public function passwordReset($resetcode)
{
$validation = Validator::make(Input::all(), UserModel::$rulesPasswordReset);
if ($validation->passes())
{
try
{
// Find the user using the user email address
$user = Sentry::findUserByLogin(Input::get('email'));
// Check if the reset password code is valid
if ($user->checkResetPasswordCode($resetcode))
{
// Attempt to reset the user password
if ($user->attemptResetPassword($resetcode, 'new_password'))
{
// Password reset passed
}
else
{
// Password reset failed
}
}
else
{
// The provided password reset code is Invalid
}
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
echo 'User was not found.';
}
}
else return Redirect::route('reset')->withInput()
->withErrors($validation)
->with('title', 'resetrequestfailure')
->with('message', 'Seems like you made some errors.');
}
O problema que estou tendo é quando eu faço Redirect::route
depois que a validação falhar. estou recebendo o resetcode
da rota definida para post
.Quando a validação falha, a rota de redirecionamento fica confusa e não consigo obter o resetcode
a segunda vez.A suposta URL do formato
http://example.com/reset/8f1Z7wA4uVt7VemBpGSfaoI9mcjdEwtK8elCnQOb
torna-se
http://bcnet.org/reset/%7Bcode%7D
Tem a ver com /{resetcode}
parte da rota e isso é variável, então como posso obter o correto resetcode
mesmo depois que a validação falha, o que significa que o URL permanece intacto.Ou como posso corrigi-lo para o apropriado Redirect::route
após a falha de validação.
Solução
Você precisa incluir o $resetcode
no seu retorno
else return Redirect::route('reset', $resetcode)->withInput()
->withErrors($validation)