Laravel 5.1 - 将表格插入表格(Blade)
Laravel 5.1 - insert a form into a form (Blade)
我的结帐页面中有一个表格,我需要在现有表格中插入一个新的小表格,如下所示:
<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 controller CouponController work good and return the right value
-I tryed do it with blade but it doesnt work, it is going always to "payment" and NOT to route "coupon"
有更好的方法吗?如果提交了其他表格,可能会禁用一种表格?
感谢您的帮助!
我无法在其他地方插入表格优惠券,因为我的模板的设计和布局不允许。
您不能嵌套 <form>
个元素。 HTML 明确禁止嵌套形式。
参见:Can you nest html forms?
一个表单需要一个动作,所以嵌套它们是不可能的。
但是你有几个选择
1) 有两个单独的表格,先提交优惠券
您将提交优惠券,在成功更新购物车总数后对其进行处理,然后 return 返回结帐并显示成功或失败的快速消息。允许更清洁、更专注的控制器。
2) 有两个单独的表格并通过 ajax. 提交优惠券
这很常见,因为您不一定要在无效优惠券上重新呈现页面,而且它还允许更清晰、更专注的控制器。
3) 在结帐表单中包含表单字段
然后,您将在结帐控制器中使用其他结帐逻辑处理它。这不太理想,因为你会有相当长的控制器。
我建议使用 Ajax 调用来完成您想要完成的任务。然后,您可以致电您的一位控制器或 API 来检查优惠券是否有效。这将是理想的,因为它可以为您提供即时响应。你不应该嵌套表格。
此外,您应该为 action 属性使用 url() 函数来指定表单的位置提交。这就是为什么您无法将表单提交到右侧 url.
如果您不熟悉 Ajax(我建议使用 jQuery 的 ajax() 函数,顺便说一句 - http://api.jquery.com/jquery.ajax), 那么一个解决方案是简单地提交一个表格,使用优惠券代码,然后验证所有已提交的数据。
如果优惠券代码已过期,则将用户带回到之前的 page/form 并显示相应的消息。 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
我的结帐页面中有一个表格,我需要在现有表格中插入一个新的小表格,如下所示:
<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 controller CouponController work good and return the right value
-I tryed do it with blade but it doesnt work, it is going always to "payment" and NOT to route "coupon"
有更好的方法吗?如果提交了其他表格,可能会禁用一种表格?
感谢您的帮助!
我无法在其他地方插入表格优惠券,因为我的模板的设计和布局不允许。
您不能嵌套 <form>
个元素。 HTML 明确禁止嵌套形式。
参见:Can you nest html forms?
一个表单需要一个动作,所以嵌套它们是不可能的。
但是你有几个选择
1) 有两个单独的表格,先提交优惠券 您将提交优惠券,在成功更新购物车总数后对其进行处理,然后 return 返回结帐并显示成功或失败的快速消息。允许更清洁、更专注的控制器。
2) 有两个单独的表格并通过 ajax. 提交优惠券 这很常见,因为您不一定要在无效优惠券上重新呈现页面,而且它还允许更清晰、更专注的控制器。
3) 在结帐表单中包含表单字段 然后,您将在结帐控制器中使用其他结帐逻辑处理它。这不太理想,因为你会有相当长的控制器。
我建议使用 Ajax 调用来完成您想要完成的任务。然后,您可以致电您的一位控制器或 API 来检查优惠券是否有效。这将是理想的,因为它可以为您提供即时响应。你不应该嵌套表格。
此外,您应该为 action 属性使用 url() 函数来指定表单的位置提交。这就是为什么您无法将表单提交到右侧 url.
如果您不熟悉 Ajax(我建议使用 jQuery 的 ajax() 函数,顺便说一句 - http://api.jquery.com/jquery.ajax), 那么一个解决方案是简单地提交一个表格,使用优惠券代码,然后验证所有已提交的数据。
如果优惠券代码已过期,则将用户带回到之前的 page/form 并显示相应的消息。 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