Laravel 5.1 - 将表单插入表单(Blade)

时间:2016-06-02 15:53:59

标签: javascript laravel laravel-5.1 blade

我的结帐页面中有一个表单,我需要在我现有的表单中插入一个新的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;

还有更好的方法吗?如果其他表格被提交,可能会禁用一个表单?

感谢您的帮助!

我无法在其他地方插入表格优惠券,因为我的模板的设计和布局不允许。

3 个答案:

答案 0 :(得分:2)

表单需要一个操作,因此将它们嵌套是不可能的。

但是你有几个选择

1)有两个单独的表格并首先提交优惠券 您提交优惠券,在成功更新购物车总数后处理优惠券,然后返回结帐,并显示成功或失败的快速消息。允许更清晰,更集中的控制器。

2)有两个单独的表格并通过ajax提交优惠券。 这很常见,因为您不一定要在无效的优惠券上重新呈现页面,而且还允许更清晰,更集中的控制器。

3)在结帐表单中包含表单字段 然后,您将使用其他结帐逻辑在结账控制器中处理它。这不太理想,因为你会有相当长的控制器。

答案 1 :(得分:1)

您无法嵌套<form>元素。 HTML明确禁止嵌套表单。

请参阅:Can you nest html forms?

答案 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