这是我在两个视图上传递变量的两条路线。
Route::resource('product', 'ProductController');
Route::resource('booking', 'BookingController');
我使用ProductController创建了一个显示当前产品(例如http://localhost:8000/product/15)的视图。
现在我创建了另一个视图来预订此产品,然后使用@include('partials.booking')在产品视图中插入它(模式弹出)。
问题是如何将产品ID传递给BookingController?有可能吗?
答案 0 :(得分:1)
这很大程度上取决于您在前端使用的框架(jquery等)
通常你的弹出窗口应该知道它所引用的产品。您可以这样做,例如
<!-- this is your html / blade -->
<div class="booking-popup">
<button class="book" data-product="{{$product->id}}">Book Now!</button>
</div>
然后,您可以使用ajax和jquery来获取数据属性
另一个选择是提供一个带有隐藏字段的表单
<form action="/booking" method="post">
{{csrf_field()}}
<input type="hidden" name="product_id" value="{{$product->id}}" />
<input type="submit" value="Book Now!" />
</form>
如果您使用laravel html集合,则可以进一步简化
修改强>
由于您的预订实际上属于某个产品,您还可以重新安排资源,以便使用路线创建预订
/product/5/booking (POST)
然后,您只需将产品ID作为路径参数
即可编辑2 只需从控制器访问它(hidde表单输入的情况)
public function store(\Illuminate\Http\Request $request) {
dd($request->input('product_id');
}
如果您通过路线定义它,只需选择您设置为占位符的任何内容
Route::post('product/{product}/book', 'BookingController@store');
然后控制器:
public function store(\Illuminate\Http\Request $request, $product) {
dd($product)
}
答案 1 :(得分:1)
将您的模型页面包含为@include('partials.booking', ['product'=>$product])
将表单操作更改为
如果您的CSRF中间件已启用,则<form action="{{url('product/'.$product->id.'/booking')}}" method="post">
并且最重要的是添加_token隐藏字段。
将您的路线更改为
Route::post('product/{product_id}/booking', 'BookingController@store');