2017-05-18 14 views
6

dostaję ten błąd w moim niestandardowych aplikacji:Route [password.reset] nie określono w laravel 5,4 w ResetPasswords.php

InvalidArgumentException in UrlGenerator.php line 304: 
Route [password.reset] not defined. 

wiem laravel zapewnia funkcjonalność resetowania hasła po wyjęciu z pudełka, ale chcę napisać własną klasę i trasy.

Oto moje trasy w web.php

// Password reset link request routes... 
Route::get('password/email', 'Auth\[email protected]'); 
Route::post('password/email', 'Auth\[email protected]'); 

// Password reset routes... 
Route::get('password/reset/{token}', 'Auth\[email protected]'); 
Route::post('password/reset', 'Auth\[email protected]'); 

A to moja PasswordController:

namespace App\Http\Controllers\Auth; 

use App\Http\Controllers\Controller; 
use Illuminate\Contracts\Auth\Guard; 
use Illuminate\Contracts\Auth\PasswordBroker; 
use Illuminate\Foundation\Auth\ResetsPasswords; 

class PasswordController extends Controller { 



    use ResetsPasswords; 

    /** 
    * Create a new password controller instance. 
    * 
    * @param \Illuminate\Contracts\Auth\Guard $auth 
    * @param \Illuminate\Contracts\Auth\PasswordBroker $passwords 
    * @return void 
    */ 
    public function __construct(Guard $auth, PasswordBroker $passwords) 
    { 
     $this->auth = $auth; 
     $this->passwords = $passwords; 
     $this->middleware('guest'); 
    } 
} 

To mój ResetPasswords.php cecha:

namespace Illuminate\Foundation\Auth; 

use Illuminate\Http\Request; 
use Illuminate\Mail\Message; 
use Illuminate\Support\Facades\Auth; 
use Illuminate\Support\Facades\Password; 
use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; 

trait ResetsPasswords 
{ 
    use RedirectsUsers; 

    /** 
    * Display the form to request a password reset link. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function getResetEmail() 
    { 
     return view('public.auth.password'); 
    } 

    /** 
    * Send a reset link to the given user. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 
    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 \Illuminate\Contracts\View\Factory|\Illuminate\View\View 
    */ 
    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 \Illuminate\Http\Request $request 
    * @return \Illuminate\Http\RedirectResponse 
    */ 
    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 \Illuminate\Contracts\Auth\CanResetPassword $user 
    * @param string $password 
    * @return void 
    */ 
    protected function resetPassword($user, $password) 
    { 
     $user->password = bcrypt($password); 

     $user->save(); 

     Auth::login($user); 
    } 
} 

Problem polega na tym, że po naciśnięciu przycisku formularza resetowania hasła prowadzi do tego błędu. Nie wiem w czym jest problem, ale wydaje phpstorm nie rozpoznaje hasła :: metodę sendResetLink w klasie PasswordBroker i podkreśla metodę z kolorem żółtym i pokazuje ten komunikat bubble:

Method sendResetLink not found in Illuminate\Support\Facades\Password 
Refreced method is not found in subject class 

ja nie wiem wiedzieć, jaka jest relacja między tą metodą a trasami?

Każda pomoc będzie mile widziane ...

Odpowiedz

2

W laravel 5,4sendResetLink ma tylko jeden parametr poświadczenia

Więc trzeba zmienić implementację metody to:

$response = $this->passwords->sendResetLink($request->only('email')); 

Następnie musisz oddzwonić do modelu User (lub co dokładnie masz), który ma

trait CanResetPassword 

Model ten musi mieć metodę:

public function sendPasswordResetNotification($token) { 
    // do your callback here 
} 
6

te trasy potrzeba nazwę.

Oto kod ..

// Password reset link request routes... 
Route::get('password/email', 'Auth\[email protected]')->name('password.email'); 
Route::post('password/email', 'Auth\[email protected]'); 

// Password reset routes... 
Route::get('password/reset/{token}', 'Auth\[email protected]')->name('password.request'); 
Route::post('password/reset', 'Auth\[email protected]')->name('password.reset'); 
Powiązane problemy