如何在laravel单一路径中使用多种方法

时间:2018-05-30 20:29:47

标签: laravel laravel-routing

我想使用laravel在单个路径中使用多个方法。我试试这种方式但是当我dd()它显示计划字符串。

Route::get('/user',[
'uses' => 'AppController@user',
'as'   => 'useraccess',
'roles'=> 'HomeController@useroles', 
]);

当我dd()'角色'选项时,它会显示这样的计划字符串。

"roles" => "HomeController@useroles"

我的中间件以这种方式检查角色。

 $actions=$request->route()->getAction();
 $roles=isset($actions['roles'])? $actions['roles'] : null;

2 个答案:

答案 0 :(得分:1)

以下是如何在一条路线上执行多种方法:

Route::get('/route', 'RouteController@index');
Route::post('/route', 'RouteController@create');
Route::put('/route', 'RouteController@update');
/* Would be easier to use
* Route::put('/route/{route}', 'RouteController@update');
* Since Laravel gives you the Model of the primary key you've passed
* in to the route.
*/
Route::delete('/route', 'RouteController@destroy');

如果您编写了自己的中间件,则可以将路由包装在Route::group中,并将中间件分别应用于这些路由或单个路由。

Route::middleware(['myMiddleware'])->group(function () {
    Route::get('/route', 'RouteController@index');
    Route::post('/route', 'RouteController@create');
    Route::put('/route', 'RouteController@update');
});

或者

Route::group(['middleware' => 'myMiddleware'], function() {
    Route::get('/route', 'RouteController@index');
    Route::post('/route', 'RouteController@create');
    Route::put('/route', 'RouteController@update');
});

无论哪个更容易阅读。

https://laravel.com/docs/5.6/routing#route-groups

答案 1 :(得分:1)

在单个路由中接受多个HTTP方法的最简单方法是使用match方法,如下所示:

Route::match(['get', 'post'], '/user', [
    'uses' => 'AppController@user',
    'as'   => 'useraccess',
    'roles'=> 'HomeController@useroles', 
]);

对于您的中间件,要检查HTTP请求类型,更简洁的方法是:

$method = request()->method();

如果您需要检查特定方法:

if (request()->isMethod('post')) {
    // do stuff for post methods
}