私はこのエラーに直面しており、関数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']
]);
}
}
謝罪。
おかげのようになる、そのコマンドは、それが完璧に動作製、感謝しかし、私はupvoteしようとすると、それは私の評判はので、私はupvoteすることはできませんが15未満であると言います。再度ありがとう.. – TryllZ
それは大丈夫です。あなたは緑の刻みボタンをクリックして私の答えを受け入れることができます。 –