laravel 5 PasswordController路由

时间:2016-04-25 11:42:25

标签: php laravel laravel-5

在laravel 5中我尝试使用PasswordController和ResetsPasswords但总是有路线问题

Route.php

Route::controllers(['uses' => 'Auth/PasswordController']);

Route::get('home/ResetsPasswords',array('as'=>'getEmail' ,'uses' => 'home/ResetsPasswords@getEmail') );

Route::post('home/ResetsPasswords',array('as'=>'postEmail' ,'uses' => 'home/ResetsPasswords@postEmail' ));

Route::get('home/ResetsPasswords/{token}',array('as' => 'getReset','uses' => 'home/ResetsPasswords@getReset' ) );

Route::post('home/ResetsPasswords/{token}', array(  'as' => 'postReset','uses' => 'home/ResetsPasswords@postReset'));

Route::get('home/ResetsPasswords',array('as'=>'getEmailSubject' ,'uses' => 'home/ResetsPasswords@getEmailSubject') );

Route::get('home/ResetsPasswords',array('as'=>'redirectPath' ,'uses' => 'home/ResetsPasswords@redirectPath') );

PasswordController.php

 <?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;
class PasswordController extends Controller
{


   use ResetsPasswords;


   public function __construct()
   {
       $this->middleware('guest');
   }
}

ResetsPasswords.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
   /*
   |--------------------------------------------------------------------------
   | Password Reset Controller
   |--------------------------------------------------------------------------
   |
   | This controller is responsible for handling password reset requests
   | and uses a simple trait to include this behavior. You're free to
   | explore this trait and override any methods you wish to tweak.
   |
   */

   use ResetsPasswords;

   /**
    * Create a new password controller instance.
    *
    * @return void
    */
   public function __construct()
   {
       $this->middleware('guest');
   }
}

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\ResetsPasswords;

class PasswordController extends Controller
{
   /*
   |--------------------------------------------------------------------------
   | Password Reset Controller
   |--------------------------------------------------------------------------
   |
   | This controller is responsible for handling password reset requests
   | and uses a simple trait to include this behavior. You're free to
   | explore this trait and override any methods you wish to tweak.
   |
   */

   use ResetsPasswords;

   /**
    * Create a new password controller instance.
    *
    * @return void
    */
   public function __construct()
   {
       $this->middleware('guest');
   }
}


ResetsPasswords.php

        <?php

    //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
    {
       /**
        * Display the form to request a password reset link.
        *
        * @return \Illuminate\Http\Response
        */
       public function getEmail()
       {
           return view('auth.password');
       }

       /**
        * Send a reset link to the given user.
        *
        * @param  \Illuminate\Http\Request  $request
        * @return \Illuminate\Http\Response
        */
       public function postEmail(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 isset($this->subject) ? $this->subject : 'Your Password Reset Link';
       }

       /**
        * Display the password reset view for the given token.
        *
        * @param  string  $token
        * @return \Illuminate\Http\Response
        */
       public function getReset($token = null)
       {
           if (is_null($token)) {
               throw new NotFoundHttpException;
           }

           return view('auth.reset')->with('token', $token);
       }

       /**
        * Reset the given user's password.
        *
        * @param  \Illuminate\Http\Request  $request
        * @return \Illuminate\Http\Response
        */
       public function postReset(Request $request)
       {
           $this->validate($request, [
               'token' => 'required',
               'email' => 'required|email',
               'password' => 'required|confirmed',
           ]);

           $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());

               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);
       }

       /**
        * Get the post register / login redirect path.
        *
        * @return string
        */
       public function redirectPath()
       {
           if (property_exists($this, 'redirectPath')) {
               return $this->redirectPath;
           }

           return property_exists($this, 'redirectTo') ? $this->redirectTo : '/home';
       }
    }

和观点 首先是电子邮件/ password.blade.php

<?php
Click here to reset your password: {{ url('password/reset/'.$token) }}
?>  

auth / password.blade.php

@extends('layouts.master')

@section('content')

<div class="container-fluid">
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<div class="panel-heading">Reset Password</div>
<div class="panel-body">
    @if (session('status'))
      <div class="alert alert-success">
             {{ session('status') }}
      </div>
    @endif

    @if (count($errors) > 0)
       <div class="alert alert-danger">
       <strong>Whoops!</strong> There were some problems with your input.<br><br>
       <ul>
           @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
           @endforeach
        </ul>
        </div>
      @endif

<form class="form-horizontal" role="form" method="POST" action="/password/email">
<input type="hidden" name="_token" value="{{ csrf_token() }}">

<div class="form-group">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" value="{{ old('email') }}">
</div>
</div>

<div class="form-group">
<div class="col-md-6 col-md-offset-4">
<button type="submit" class="btn btn-primary">
         Send Password Reset Link
</button>
</div>
</div>
</form>

</div>
</div>
</div>
</div>
</div>

@endsection

reset.blade.php

@extends('layouts.master')

@section('content')

<div class="container-fluid">
<div class="row">
 <div class="col-md-8 col-md-offset-2">
 <div class="panel panel-default">
 <div class="panel-heading">Reset Password</div>
 <div class="panel-body">

 @if (count($errors) > 0)
    <div class="alert alert-danger">
    <strong>Whoops!</strong> There were some problems with your input.<br><br>
    <ul>
        @foreach ($errors->all() as $error)
              <li>{{ $error }}</li>
        @endforeach
         </ul>
        </div>
@endif

<form class="form-horizontal" role="form" method="POST" action="/password/reset">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="token" value="{{ $token }}">

<div class="form-group">
<label class="col-md-4 control-label">E-Mail Address</label>
<div class="col-md-6">
<input type="email" class="form-control" name="email" value="{{ old('email') }}">
</div>
</div>

<div class="form-group">
<label class="col-md-4 control-label">Password</label>
<div class="col-md-6">
<input type="password" class="form-control" name="password">
</div>
 </div>

 <div class="form-group">
 <label class="col-md-4 control-label">Confirm Password</label>
 <div class="col-md-6">
 <input type="password" class="form-control" name="password_confirmation">
 </div>
  </div>

 <div class="form-group">
 <div class="col-md-6 col-md-offset-4">
 <button type="submit" class="btn btn-primary">
             Reset Password
 </button>
 </div>
 </div>
 </form>

 </div>
 </div>
 </div>
 </div>
</div>

@endsection

最后是我的登录视图

<a href="{{action("home.ResetsPasswords@getEmail")}}">Mot de passe oublié?</a>

所以错误是

调用未定义的方法Laravel \ Routing \ Route :: controllers()

你可以帮助我:/我尝试多次改变路线但总是同样的问题!!!!!!!
    谢谢

3 个答案:

答案 0 :(得分:0)

Laravel 5不推荐使用隐式控制器。您需要删除它:

Route::controllers(['uses' => 'Auth/PasswordController']);

更多信息:https://laravel.com/docs/5.2/routing#route-model-binding

答案 1 :(得分:0)

这是laravel 5

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

这是针对laravel 5.2

Route::group(['middleware' => ['web']], function () {
    Route::controllers([
        'auth' => 'Auth\AuthController',
        'password' => 'Auth\PasswordController',
    ]);
});

答案 2 :(得分:0)

我认为你在routes.php中使用

use Illuminate\Routing\Route;

Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

如果你使用它,则会出现错误。 调用未定义的方法Illuminate \ Routing \ Route :: controllers()

要避免此错误,请使用此

use Illuminate\Support\Facades\Route;


Route::controllers([
    'auth' => 'Auth\AuthController',
    'password' => 'Auth\PasswordController',
]);

注意:不需要导入任何路线 保持原样 以下也适用

Route::controllers([
        'auth' => 'Auth\AuthController',
        'password' => 'Auth\PasswordController',
    ]);