【问题标题】:laravel 5 PasswordController Routelaravel 5 密码控制器路由
【发布时间】:2016-08-18 18:49:19
【问题描述】:

在 laravel 5 中,我尝试了 PasswordController 和 ResetsPasswords,但我总是遇到路由问题

路由.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';
       }
    }

对于意见 首先是 emails/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()

你能帮帮我吗:/我尝试改变路线很多次,但总是同样的问题!!!!!!!
谢谢你

【问题讨论】:

    标签: php laravel laravel-5


    【解决方案1】:

    我认为你在 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',
        ]);
    

    【讨论】:

    • 我没有在路线中导入任何东西我尝试使用 Illuminate\Support\Facades\Route;相同的错误信息
    • 你使用的是哪个版本的 laravel? laravel 5 或 5.1 或 5.2
    【解决方案2】:

    这适用于 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',
        ]);
    });
    

    【讨论】:

    • 当我更改它时也会出现相同的消息` Route::controllers([ 'auth' => 'Auth\AuthController', 'password' => 'Auth\PasswordController', ]);` 调用到未定义的方法 Laravel\Routing\Route::controllers()
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-07-23
      • 1970-01-01
      • 2015-10-02
      • 2015-06-10
      • 1970-01-01
      • 2015-07-20
      • 1970-01-01
      • 1970-01-01
      • 2014-07-20
      相关资源
      最近更新 更多