假设我们在Laravel中有以下路线:
Route::get('/blog/{id}/{slug}', ['as' => 'blog', 'uses' => 'Front\PostController@single']);
其中 {id} 和 {slug} 是变量,并将作为参数传递给 single()方法的参数> PostController 类,如下所示:
public function single($id, $slug) {}
但是您也可以传递 Request 对象,如下所示:
public function single(Request $request, $id, $slug) {}
甚至:
public function single($id, $slug, Request $request) {}
Laravel仍然可以很好地处理它们……看起来参数的顺序不一致,或者应用了某些特殊技术?
答案 0 :(得分:0)
参数的顺序并不重要,除非您在这些参数中使用默认值(自PHP 5.6+起可用),如下所示:
function something($foo, $bar=true) { ... }
应该是参数中的最后一个。
请查看有关"use of default parameters in functions"的官方PHP文档:
默认值必须是一个常量表达式,而不是(例如)变量,类成员或函数调用。
请注意,使用默认参数时,任何默认值都应位于所有非默认参数的右侧;否则,事情将无法按预期进行。
答案 1 :(得分:0)
使用时:
公共功能单($ id,$ slug,Request $ request){}
您从Request类开始指定$ request的类型。因此,laravel没有使用任何特殊的技术,而只是PHP的哲学,即当您指定类型时,它会维护订单本身。
但是,是的,laravel肯定会使用某些逻辑来使用$ request对象中的所有请求数据。