我在Laravel 5.3.26中使用隐式模型绑定来处理这样的路由
POST /teams/{team}/customers/{customer}/addresses
在中间件中使用{team}
来确定用户当前正在使用哪个团队。但是地址的存储方法只需注入{customer}
;它不会以任何方式访问团队。所以方法的标题可能如下所示:
public function store(Customer $customer, Request $request)
不幸的是,所选团队的ID会被注入$customer
而不是实际的Customer
实例。如果我将$team
参数添加到store方法,那么函数头看起来像这样:
public function store(Team $team, Customer $customer, Request $request)
一切都按预期工作。有没有办法省略$team
参数,但仍然可以在函数中注入正确的Customer
实例?
答案 0 :(得分:0)
我认为你应该为此做出不同的路线:
Route::put('customers', 'CustomerController@store')-name('customers.store');
然后你的表格:
<form action="{{ route('customers.store') }}' method="POST">
{{ method_field('PUT') }}
{{ csrf_field() }}
//other stuff
</form>
或者,如果必须,您可以在路线中使用?
来指示模型可能存在或不存在:
Route::post('/teams/{team?}/customers/{customer}/addresses', 'Controller@method');
然后在您的控制器方法中,您仍然需要定义$team
,但它可能存在也可能不存在,例如:
public function store(Request $request, $team = null, Customer $customer)
旁注 Request
应始终排在第一位。