2017-10-09 11 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

おかげのようになる、そのコマンドは、それが完璧に動作製、感謝しかし、私はupvoteしようとすると、それは私の評判はので、私はupvoteすることはできませんが15未満であると言います。再度ありがとう.. – TryllZ

+0

それは大丈夫です。あなたは緑の刻みボタンをクリックして私の答えを受け入れることができます。 –

関連する問題