2017-10-09 106 views
0

我面臨這個錯誤,無法找到問題的地方,因爲它只提到函數()不存在,起初我雖然蓋帽的問題,因爲函數F是在帽但是我不是那種情況,因爲如果有人能夠指出這一點,我已經瀏覽了每一行代碼很多次。Laravel錯誤反射異常函數不存在

這種情況是這樣的,我有一個登錄頁面與mysql中的虛擬播種機數據。 PHP表單用於驗證用戶,然後重定向到儀表板頁面,但在重定向時顯示錯誤頁面。

屏幕截圖是否有幫助。

https://postimg.org/image/8rrk1vfutn/

CheckRole.php

<?php 

namespace App\Http\Middleware; 

use Closure; 

class CheckRole 
{ 
    public function handle($request, Closure $next) 
    { 
     $roles = $this->getRequiredRoleForRoute($request->route()); 
     if ($request->user()->hasRole($roles) || !$roles) 
     { 
     return $next($request); 
     } 
     return redirect()->route('noPermission'); 
    } 

    private function getRequiredRoleForRoute($route) 
    { 
     $actions = $route->getAction(); 
     return isset($actions['roles']) ? $actions['roles'] : null; 
    } 
} 

DashboardController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 

class DashboardController extends Controller 
{ 
    public function __construct() 
    { 
     $this->middleware('web'); 
    } 

    public function dashboard() 
    { 
     return view('layout.dashboard'); 
    } 
} 

LoginController.php

<?php 

namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\AuthenticatesUsers; 
use Auth; 

class LoginController extends Controller 
{ 
    use AuthenticatesUsers; 

    protected $name = 'name'; 
    protected $redirectTo = '/dashboard'; 
    protected $guard = 'web'; 

    public function getLogin() 
    { 
     if (Auth::guard('web')->check()) 
     { 
     return redirect()->route('dashboard'); 
     } 
     return view('login'); 
    } 

    public function postLogin(Request $request) 
    { 
     $auth = Auth::guard('web')->attemp(['name'=>$request->name, 'password'=>$request->password,'active'=>1]); 

     if ($auth) 
     { 
     return redirect()->route('dashboard'); 
     } 
     return redirect()->route('/'); 
    } 

    public function getLogout() 
    { 
     Auth::guard('web')->logout(); 
     return redirect()->route('/'); 
    } 
} 

Authen.php

<?php 

namespace App\Http\Middleware; 

use Closure; 
use Illuminate\Support\Facades\Auth; 

class Authen 
{ 
    public function handle($request, Closure $next, $guard = 'web') 
    { 
     if (!Auth::guard($guard)->check()) 
     { 
     return redirect()->route('/'); 
     } 
     return $next($request); 
    } 
} 

添加在Kernel.php

'roles' => \App\Http\Middleware\CheckRole::class, 
'authen' => \App\Http\Middleware\Authen::class, 

Role.php

<?php 
namespace App; 
use Illuminate\Database\Eloquent\Model; 
class Role extends Model 
{ 
    protected $table = 'roles'; 
    protected $fillable = 'name'; 
    protected $primaryKey = 'id'; 
    public $timestamps = false; 

    public function users() 
    { 
     return $this->hasMany('App\User', 'role_id', 'id'); 
    } 
} 

user.php的

<?php 

namespace App; 

use Illuminate\Notifications\Notifiable; 
use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    use Notifiable; 

    protected $fillable = [ 
     'name', 'email', 'password', 'active', 'role_id', 
    ]; 

    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 

    public function role() 
    { 
     return $this->hasOne('App\Role', 'id', 'role_id'); 
    } 

    private function checkIfUserHasRole($need_role) 
    { 
     return ($need_role == $this->role->name) ? true : null; 
    } 

    public function hasRole() 
    { 
     if (s_array($roles)) 
     { 
      foreach($roles as $need_role) 
      { 
       if($this->checkIfUserHasRole($need_role)) 
       { 
        return true; 
       } 
      } 
      } 
      else 
      { 
       return $this->checkIfUserHasRole($roles); 
      } 
      return false; 
     } 
} 

web.php

<?php 

Route::get('/', ['as'=>'/', 'uses'=>'[email protected]']); 
Route::post('/login', ['as'=>'login', '[email protected]']); 

Route::group(['middleware'=>['authen', 'roles']], function() 
      { 
       Route::get('/logout', ['as'=>'logout', 'uses'=>'[email protected]']); 
       Route::get('/dashboard', ['as'=>'dashboard', 'uses'=>'[email protected]']); 
      }); 

UsersTableSeeder

<?php 

use Illuminate\Database\Seeder; 
use App\User; 
class UsersTableSeeder extends Seeder 
{ 
    public function run() 
    { 
     User::create([ 
      'role_id'=>1, 
      'active'=>1, 
      'name'=>'James', 
      'email'=>'[email protected]', 
      'password'=>bcrypt('james'), 
      'remember_token'=>str_random(10) 
     ]); 
    } 
} 

RolesTableSeeder

<?php 

use Illuminate\Database\Seeder; 
use App\Role; 
class RolesTableSeeder extends Seeder 
{ 
    public function run() 
    { 
     Role::insert([ 
      ['name'=>'Admin'], 
      ['name'=>'Student'], 
      ['name'=>'Teacher'] 
     ]); 
    } 
} 

道歉冗長代碼。

回答

1

您忘記使用/ login路徑中的用法。 這會是這樣

Route::post('/login', ['as'=>'login', 'uses'=>'[email protected]']); 
+0

謝謝,這個命令使工作完美,但是欣賞當我嘗試給予好評,它說我的名聲小於15,所以我不能給予好評。再次感謝.. – TryllZ

+0

沒關係。您可以點擊綠色勾號按鈕接受我的答案。 –