Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在Laravel中声明路由时,在if语句中使用方法控制器_Php_Laravel - Fatal编程技术网

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

Php 在Laravel中声明路由时,在if语句中使用方法控制器,php,laravel,Php,Laravel,声明路由时,我想在控制器if语句中使用我的show方法: Route::get('/leave', function() { if(Auth::user()->admin) { 'uses' => 'TimeController@show' } else { return "not found"; } })->name('admin-time'); 但是我定义的使用的不起作用!我知道它不应该工作。对于这样

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

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

但是我定义的
使用的
不起作用!我知道它不应该工作。

对于这样的身份验证,您应该使用中间件:

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

Route::middleware('auth:admin')->group(function () {
    Route::get('/leave', ['uses' => 'TimeController@show'])->name('admin-time');
});
或使用自定义请求:

例如,将路线保持为:

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

TimeController
中,您的
show
方法将包含您的自定义
请求
,您可以使用
php artisan make:Request MyCustomRequest

public function show(MyCustomRequest $request) {
   ...
}
在您的
MyCustomRequest
中,您可以将其添加到
authorize()
方法中:

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

    return false;
}
路线:

控制器:

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

    // your code.
}
记住:不要使用基于闭合的管线。它阻止你
路由:缓存


单独的路由或中间件如何?
public function show()
{
    if(!Auth::user()->admin)
    {
        return abort(404);
    }

    // your code.
}