Маршрут [пароль.reset] не определено в laravel 5.4 в ResetPasswords.РНР
я получаю эту ошибку в своем пользовательском приложении:
InvalidArgumentException in UrlGenerator.php line 304:
Route [password.reset] not defined.
Я знаю, что laravel предоставляет функциональность сброса пароля из коробки, но я хочу написать свой собственный класс и маршруты.
вот мои маршруты в интернете.в PHP
// Password reset link request routes...
Route::get('password/email', 'AuthPasswordController@getResetEmail');
Route::post('password/email', 'AuthPasswordController@postResetEmail');
// Password reset routes...
Route::get('password/reset/{token}', 'AuthPasswordController@getReset');
Route::post('password/reset', 'AuthPasswordController@postReset');
и это мой PasswordController:
namespace AppHttpControllersAuth;
use AppHttpControllersController;
use IlluminateContractsAuthGuard;
use IlluminateContractsAuthPasswordBroker;
use IlluminateFoundationAuthResetsPasswords;
class PasswordController extends Controller {
use ResetsPasswords;
/**
* Create a new password controller instance.
*
* @param IlluminateContractsAuthGuard $auth
* @param IlluminateContractsAuthPasswordBroker $passwords
* @return void
*/
public function __construct(Guard $auth, PasswordBroker $passwords)
{
$this->auth = $auth;
$this->passwords = $passwords;
$this->middleware('guest');
}
}
это мои ResetPasswords.в PHP черта:
namespace IlluminateFoundationAuth;
use IlluminateHttpRequest;
use IlluminateMailMessage;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesPassword;
use SymfonyComponentHttpKernelExceptionNotFoundHttpException;
trait ResetsPasswords
{
use RedirectsUsers;
/**
* Display the form to request a password reset link.
*
* @return IlluminateHttpResponse
*/
public function getResetEmail()
{
return view('public.auth.password');
}
/**
* Send a reset link to the given user.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpRedirectResponse
*/
public function postResetEmail(Request $request)
{
$this->validate($request, ['email' => 'required|email']);
$response = Password::sendResetLink($request->only('email'), function (Message $message) {
$message->subject($this->getEmailSubject());
});
switch ($response) {
case Password::RESET_LINK_SENT:
return redirect()->back()->with('status', trans($response));
case Password::INVALID_USER:
return redirect()->back()->withErrors(['email' => trans($response)]);
}
}
/**
* Get the e-mail subject line to be used for the reset link email.
*
* @return string
*/
protected function getEmailSubject()
{
return property_exists($this, 'subject') ? $this->subject : 'Your Password Reset Link';
}
/**
* Display the password reset view for the given token.
*
* @param string $token
* @return IlluminateContractsViewFactory|IlluminateViewView
*/
public function getReset($token = null)
{
if (is_null($token)) {
throw new NotFoundHttpException;
}
return view('public.auth.reset')->with('token', $token);
}
/**
* Reset the given user's password.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpRedirectResponse
*/
public function postReset(Request $request)
{
$this->validate($request, [
'token' => 'required',
'email' => 'required|email',
'password' => 'required|confirmed|min:6',
]);
$credentials = $request->only(
'email', 'password', 'password_confirmation', 'token'
);
$response = Password::reset($credentials, function ($user, $password) {
$this->resetPassword($user, $password);
});
switch ($response) {
case Password::PASSWORD_RESET:
return redirect($this->redirectPath())->with('status', trans($response));
default:
return redirect()->back()
->withInput($request->only('email'))
->withErrors(['email' => trans($response)]);
}
}
/**
* Reset the given user's password.
*
* @param IlluminateContractsAuthCanResetPassword $user
* @param string $password
* @return void
*/
protected function resetPassword($user, $password)
{
$user->password = bcrypt($password);
$user->save();
Auth::login($user);
}
}
проблема в том, когда я нажимаю форму сброса пароля кнопка это приводит к этой ошибке. Я не знаю, в чем проблема, но кажется, что phpstorm не может распознать метод Password:: sendResetLink в классе PasswordBroker и выделяет метод желтым цветом и показывает это сообщение пузыря:
Method sendResetLink not found in IlluminateSupportFacadesPassword
Refreced method is not found in subject class
Я не знаю, какова связь между этим методом и маршруты?
любая помощь будет оценили...
3 ответов
на что Laravel 5.4 sendResetLink
имеет только один параметр полномочия
таким образом, вы должны изменить свою реализацию метода на это:
$response = $this->passwords->sendResetLink($request->only('email'));
тогда вы должны поставить обратный вызов User
модель (или что именно у вас), что имеет
trait CanResetPassword
эта модель должна иметь способ:
public function sendPasswordResetNotification($token) {
// do your callback here
}
этим маршрутам нужно имя.
вот код..
// Password reset link request routes...
Route::get('password/email', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.email');
Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail');
// Password reset routes...
Route::get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.request');
Route::post('password/reset', 'Auth\ResetPasswordController@postReset')->name('password.reset');
маршрут
{{ route('password.email') }}
возвращает /password/reset/{token}
и по маршруту
{{ route('password.request') }}
возвращает /password/reset
тот, кто написал это, должно быть, действительно устал той ночью, но я думаю, что слишком поздно менять структуру в этот момент