Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用Laravel 5方法与其他参数一起注入_Php_Controller_Routes_Laravel 5 - Fatal编程技术网

Php 使用Laravel 5方法与其他参数一起注入

Php 使用Laravel 5方法与其他参数一起注入,php,controller,routes,laravel-5,Php,Controller,Routes,Laravel 5,所以我正在开发一个管理界面。我有一条这样设置的路线: Route::controllers([ 'admin' => 'AdminController', ]); 然后我有一个控制器和一些方法: public function getEditUser($user_id = null) { // Get user from database and return view } public function postEditUser($user_id = 0, EditU

所以我正在开发一个管理界面。我有一条这样设置的路线:

Route::controllers([
    'admin' => 'AdminController',
]);
然后我有一个控制器和一些方法:

public function getEditUser($user_id = null)
{
    // Get user from database and return view
}

public function postEditUser($user_id = 0, EditUserRequest $request)
{
    // Process any changes made
}
如您所见,我正在使用方法注入来验证用户输入,因此URL如下所示:

http://example.com/admin/edit-user/8697
GET请求将转到GET方法,POST请求将转到POST方法。问题是,如果我正在创建一个新用户,则不会有ID:

http://examplecom/admin/edit-user/
然后我得到一个错误(意译):

传递给控制器的参数2必须是EditUserRequest的实例,未给定任何实例


所以现在我正在传入一个ID 0,以使其能够用于创建新用户,但是这个应用程序才刚刚开始,所以我必须在整个应用程序中都这样做吗?是否有更好的方法传递验证方法和可选参数?任何智慧都将受到赞赏。

您可以颠倒参数的顺序,因此可选参数是结尾:

public function postEditUser(EditUserRequest $request, $user_id = null)
{

}

然后,Laravel将首先解析
EditUserRequest
,如果没有用户id,则不再传递任何内容,因此默认值将生效。

您可能应该为创建用户创建另一个方法。PUT应用于更新,而POST应用于创建so:
putEditUser
postCreateUser
如果颠倒顺序会怎么样
postEditUser(EditUserRequest$request,$user_id=null)
@lukasgeiter-Huh,我想我已经试过了,但它就像一个符咒一样有效(颠倒顺序)。把它贴出来作为回答,我会接受的。另外,我使用的另一种方法是将user\u id作为隐藏字段传入,并且在POST方法上没有user\u id参数。