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

什么';使用where约束区分Laravel中多条路线的最佳方法是什么?,laravel,routing,Laravel,Routing,这是行不通的。第二条路由覆盖第一条路由 Route::get('user/{id}',函数($id){ 返回“这是用户1:”。$id; })->其中(['id'=>'1']); 路由::get('user/{id}',函数($id){ 返回“这是用户2:”。$id; })->其中(['id'=>'2']); 我可以对值进行硬编码,以便“user/1”可以工作,但是请求中没有$id变量,或者控制器中没有可访问的变量 一个更真实的例子是 Route::put('purchase/{customer

这是行不通的。第二条路由覆盖第一条路由

Route::get('user/{id}',函数($id){
返回“这是用户1:”。$id;
})->其中(['id'=>'1']);
路由::get('user/{id}',函数($id){
返回“这是用户2:”。$id;
})->其中(['id'=>'2']);
我可以对值进行硬编码,以便“user/1”可以工作,但是请求中没有$id变量,或者控制器中没有可访问的变量

一个更真实的例子是

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

这是我需求的一个简化示例,但基本上我希望可以在请求对象上访问
$customerType
。目前,我正在对路由中的参数进行硬编码,并使用中间件从url中提取值,然后在请求对象上将它们手动设置为参数。是否有更干净的方法来处理此问题?

如果您想根据路由变量调用不同的控制器,请尝试此方法

Route::put('purchase/{customerType}/{id}', function($customerType, $id){ if($customerType == internal){ return App::call('App\Http\Controllers\InternalPurchaseController@submit' . $id); } } 路由::put('purchase/{customerType}/{id}',函数($customerType,$id){ 如果($customerType==内部){ 返回App::call('App\Http\Controllers\InternalPurchaseController@submit"(港币);; }
} 如果你想根据路由变量调用不同的控制器,试试这个

Route::put('purchase/{customerType}/{id}', function($customerType, $id){ if($customerType == internal){ return App::call('App\Http\Controllers\InternalPurchaseController@submit' . $id); } } 路由::put('purchase/{customerType}/{id}',函数($customerType,$id){ 如果($customerType==内部){ 返回App::call('App\Http\Controllers\InternalPurchaseController@submit"(港币);; }
}为什么要把
customerType
当作参数呢?只需将路由定义为
/internal/{id}
/external/{id}
。因为您有不同的控制器处理它们,它们应该知道自己的类型,比如
private$type=“internal”;
InternalPurchaseController
中,以及
private$type=“external”
ExternalPurchaseController
中的
。它们共享一些中间件,并形成基于该值采取不同操作的请求。嗯,我明白了……当将这些值传递给请求时,
request
是否会在共享中间件或控制器中使用?是否可以将该逻辑移动到控制器或separa每个控制器访问的组件?例如,
private$externalComponent=new Example($request);
,等等。可能会发送带有请求的
$customerType
,并在控制器内处理它?例如:
if($request->customerType='internal'){…}else{…}
路由如何/为什么不同?我的意思是
内部控制器
外部控制器
之间的逻辑有什么不同?为什么要把
客户类型
作为一个参数呢?只需将路由定义为
/internal/{id}
/external/{id}
。由于您有不同的控制器处理它们,它们应该知道自己的类型,例如
private$type=“internal”
中的
InternalPurchaseController
,以及
private$type=“external”
ExternalPurchaseController
中的
。它们共享一些中间件,并形成基于该值采取不同操作的请求。嗯,我明白了……当将这些值传递给请求时,
request
是否会在共享中间件或控制器中使用?是否可以将该逻辑移动到控制器或separa每个控制器访问的组件?例如,
private$externalComponent=new Example($request);
,等等。可能会发送带有请求的
$customerType
,并在控制器内处理它?例如:
if($request->customerType='internal'){…}else{…}
路由如何/为什么不同?我的意思是
InternalController
ExternalController
中的逻辑有什么不同?这可能会有帮助,但闭包不能与路由缓存一起工作。此外,我的示例非常简单,实际上我需要将此逻辑应用于50多条路由。这可能会有帮助,但闭包不能使用路由缓存。另外,我的示例非常简单,实际上我需要将此逻辑应用于50多条路由。