在Laravel中声明路由时在if语句中使用方法控制器

时间:2018-04-23 11:46:53

标签: php laravel

我想在声明路由时在if语句中使用我的show方法:

Route::get('/leave', function() {
    if(Auth::user()->admin)
    {
        'uses' => 'TimeController@show'
    }
    else {
        return "not found";
    }
})->name('admin-time');

但我定义它的uses不起作用!我知道它不应该有用。

2 个答案:

答案 0 :(得分:1)

对于这样的身份验证,您应该使用中间件: https://laravel.com/docs/5.6/middleware

例如,通过将路径包装在自定义中间件auth:admin中来保护路由:

Route::middleware('auth:admin')->group(function () {
    Route::get('/leave', ['uses' => 'TimeController@show'])->name('admin-time');
});

或使用自定义请求: https://laravel.com/docs/5.6/requests

例如,将您的路线保持为:

Route::get('/leave', ['uses' => 'TimeController@show'])->name('admin-time');

在您的TimeController show方法中,您可以使用Request生成自定义php artisan make:request MyCustomRequest

public function show(MyCustomRequest $request) {
   ...
}

在您的MyCustomRequest中,您可以将其添加到authorize()方法:

public function authorize()
{
    if (Auth::user()->admin) {
        return true;
    }

    return false;
}

答案 1 :(得分:0)

路线:

public function show()
{
    if(!Auth::user()->admin)
    {
        return abort(404);
    }

    // your code.
}

控制器:

route:cache
  

请记住:不要使用基于闭包的路线。它阻止你   {{1}}。