这不起作用。第二条路线将覆盖第一条路线。
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对象上的参数。有没有更清洁的方法来解决这个问题?
答案 0 :(得分:0)
如果您要根据路由变量调用其他控制器,请尝试此操作。
Route::put('purchase/{customerType}/{id}', function($customerType, $id){ if($customerType == internal){ return App::call('App\Http\Controllers\InternalPurchaseController@submit' . $id); } }