使用where约束在Laravel中区分多条路线的最佳方法是什么?

时间:2019-07-17 18:45:13

标签: laravel routing

这不起作用。第二条路线将覆盖第一条路线。

Route::get('user/{id}', function ($id) {
    return 'This is User 1:' . $id;
})->where(['id' => '1']);

Route::get('user/{id}', function ($id) {
    return 'This is User 2:' . $id;
})->where(['id' => '2']);

我可以对值进行硬编码,这样'user / 1'可以工作,但是请求上没有$ id变量,也没有控制器中可以访问的变量。

一个更真实的例子是

Route::put('purchase/{customerType}/{id}', 'InternalPurchaseController@submit')->where(['customerType' => 'internal']);
Route::put('purchase/{customerType}/{id}', 'ExternalPurchaseController@submit')->where(['customerType' => 'external']);

这是我的需求的简化示例,但是基本上我希望$customerType可以在Request对象上访问。目前,我正在对路径中的参数进行硬编码,并使用中间件从URL中提取值,然后将其手动设置为Request对象上的参数。有没有更清洁的方法来解决这个问题?

1 个答案:

答案 0 :(得分:0)

如果您要根据路由变量调用其他控制器,请尝试此操作。

Route::put('purchase/{customerType}/{id}', function($customerType, $id){
     if($customerType == internal){
        return App::call('App\Http\Controllers\InternalPurchaseController@submit' . $id);
     }
 }