我的结帐页面中有一个表单,我需要在我现有的表单中插入一个新的litle表单,如下所示:
<form class="login" id="paypalForm" method="post" action="{{url('payment')}}">
// my inputs checkout....address shipping, email etc...
// i need insert HERE a new litle form to CHECK if input code COUPON is valid
{!! Form::open(['url' => 'coupon']) !!}
<input type="text" class="form-control dark" id="coupon" name="coupon">
<button type="submit" name="submit" class="btn" />
{!! Form::close() !!}
</form>
-my控制器CouponController工作正常并返回正确的值
- 我尝试用刀片做但它不起作用,它总是要付款&#34;付款&#34;而不是路由&#34;优惠券&#34;
还有更好的方法吗?如果其他表格被提交,可能会禁用一个表单?
感谢您的帮助!
我无法在其他地方插入表格优惠券,因为我的模板的设计和布局不允许。
答案 0 :(得分:2)
表单需要一个操作,因此将它们嵌套是不可能的。
但是你有几个选择
1)有两个单独的表格并首先提交优惠券 您提交优惠券,在成功更新购物车总数后处理优惠券,然后返回结帐,并显示成功或失败的快速消息。允许更清晰,更集中的控制器。
2)有两个单独的表格并通过ajax提交优惠券。 这很常见,因为您不一定要在无效的优惠券上重新呈现页面,而且还允许更清晰,更集中的控制器。
3)在结帐表单中包含表单字段 然后,您将使用其他结帐逻辑在结账控制器中处理它。这不太理想,因为你会有相当长的控制器。
答案 1 :(得分:1)
您无法嵌套<form>
元素。 HTML明确禁止嵌套表单。
答案 2 :(得分:1)
我建议您使用Ajax调用来完成您要完成的任务。然后,您可以调用其中一个控制器或API来检查优惠券是否有效。这将是理想的,因为它可以为您提供即时响应。你不应该嵌套表格。
此外,您应该使用操作属性的 url()功能来指定您希望提交表单的位置。这就是为什么您在将表单提交到正确的URL时遇到麻烦。
如果您不熟悉Ajax(我建议使用jQuery&#39; s ajax()函数,顺便说一下 - http://api.jquery.com/jquery.ajax),那么onc解决方案就是简单地提交一个表单,使用优惠券代码,然后验证已提交的所有数据。
如果优惠券代码已过期,请将用户带回上一页/表单并显示相应的消息。 Laravel使得完成此操作变得非常简单,因为它允许您使用提交的信息重定向到上一页,并在输入字段下方显示错误消息。
它实际上非常易于使用,应该成为您控制器方法的一部分...
$validator = Validator::make($request->all(), [
'shipping_address' => 'required|max:255',
....
'coupon' => 'your_custom_validation_here'
// create a custom validation rule
]);
if ($validator->fails() {
return redirect('url')
->withErrors($validator)
->withInput();
}
请点击此处了解详情...... https://laravel.com/docs/5.2/validation
这应该是最好和最快的解决方案,而不使用Ajax调用。
自定义验证 - https://laravel.com/docs/5.2/validation#custom-validation-rules