我有篮球比赛详情页面和购买门票的页面。在匹配详细信息页面中,用户可以通过选择选项选择故障单的类型以及他们想要的每个故障的数量。然后点击“购买”进入付款页面。在付款页面中,我想显示用户选择的摘要,摘要如下:
Type Quantity Price Subtotal
center 2 100$ 200$
left 1 50$ 50$
right 1 50$ 50$
Total 300$
您是否知道如何在匹配详情页面中获取用户选择的每张票的数量,并将该信息发送到付款页面以显示摘要?
我对此问题的代码结构:
我有一个FrontController,它有single()方法来显示匹配详细信息页面:
public function single($id){
$match = Match::where('id', $id)->first();
$tickets = Ticket::where('match_id', $match_id->id)->get();
return view('matchs.show')->with('match',$match)->with('match', $match)->with('tickets', $tickets);
}
然后在比赛详情页面中我列出了各种类型的门票,每张门票都有一个选择菜单,以便用户可以选择每张门票的门票数量:
<ul>
@foreach($tickets as $ticket)
<li>
<span>{{$ticket->title}}</span>
<form method="post" action="{{route('matchs.payment', ['id' => $match->id, 'slug' => $match->slug])}}">
<select name={{ $ticket->title }}>
<option selected>0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
</select>
</form>
<span>X {{$ticket->showPrice()}}</span>
</li>
@endforeach
<li>
<span>TOTAL</span>
<span>0.00€</span>
</li>
<input type="submit" value="Go To Payment Page"/>
</form>
</ul>
然后在FrontController中还有付款方式来显示付款页面(我不知道这是一个好方法还是pay()方法应该在其他控制器中,但现在是在FrontController中):< / p>
public function payment(){
return view('matchs.payment');
}
显示付款页面的路线:
Route::get('/match/{id}/{slug?}/payment', [
'uses' => 'FrontController@payment',
'as' =>'matchs.payment'
]);
答案 0 :(得分:1)
首先改变你的路线从Route :: get到Route :: post,否则你得到异常notMethodAllowed
下一步:可能会出现csrf异常 - 您需要在表单中添加{{csrf_field()}}
我相信从DB中获取一个元素有更短更优雅的方法:
$ match = Match :: findOrFail($ id)或者你甚至可以搜索路径模型绑定
您可以用这种较短的方式显示数据视图:返回视图(&#39; matchs.show&#39;,压缩(&#39;匹配&#39;,&#39;票证&#39;));
基本上你应该在payment()中获取数据(它应该被称为商店或类似的东西)并将数据放入数据库或会话中,然后重定向到支付功能,其中您从会话或数据库中检索数据来自上一步
方式:单() - &gt;提交表单 - &gt; store(请求$ request) - &gt;保存数据和重定向 - &gt;付款()
请记住验证表单中的所有数据。