2016-06-02 4 views
0

я имею форму в моей странице проверки, мне нужно вставить новую LITLE форму в моей форме существуют, например:Laravel 5,1 - вставить форму в форму (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> 

-Мой контроллер CouponController хорошо работать и возвращать правильное значение

-I судимое сделать это с лезвием, но он не работает, он будет всегда «платеж», а не маршрут «купон»

Существует лучшийпуть? возможно, отключить одну форму, если будет отправлена ​​другая форма?

Благодарим за помощь!

Я не могу вставить форму купона в другое место, потому что дизайн и макет моего шаблона не разрешают.

ответ

1

Я бы рекомендовал использовать вызов Ajax для того, что вы пытаетесь выполнить. Затем вы можете позвонить одному из ваших контроллеров или API, чтобы проверить, действительно ли купон. Это было бы идеально, потому что это может дать вам мгновенный ответ. Вы не должны быть вложенными формами.

Кроме того, вы должны использовать URL() функции для действий атрибута, чтобы указать, где вы хотите, чтобы форма должна быть представлены. Вот почему у вас возникают проблемы с отправкой формы на правильный URL-адрес.

Если вы не знакомы с Ajax (я рекомендую использовать Ajax JQuery (в) функцию, кстати - http://api.jquery.com/jquery.ajax), то ОНК решением является просто представить ОДНУ форму, с купоном код, а затем проверить все данные, которые были представлены.

Если код купона истек, верните его на предыдущую страницу/форму и отобразите соответствующее сообщение.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.

Пользовательские Validation - https://laravel.com/docs/5.2/validation#custom-validation-rules

1

Вы не можете вместить <form> элементов. HTML явно запрещает вложенные формы.

См: Can you nest html forms?

+0

как я могу решить эту проблему? возможно отключить одну форму с помощью javascript и включить форму, которую я хочу отправить? –

2

форма нуждается в одно действие, поэтому гнездование их не представляется возможным, как вы это делаете.

Однако у вас есть несколько вариантов

1) имеют две отдельных форм и представить купон первого Вы бы представить купон, обработать его при обновлении успеха Корзинки и вернуться обратно к кассе с флэш-сообщение об успехе или неудаче. Позволяет использовать более сфокусированные контроллеры.

2) Имейте две отдельные формы и отправьте купон через ajax. Это довольно часто, потому что вы не обязательно хотите повторно отобразить страницу по недействительному купону, а также для более чистых более сфокусированных контроллеров.

3) Включите поля формы в виде оформления заказа Вы бы затем обработать его в контроллере кассы с другой логикой проверки. Это не так идеально, потому что у вас будут довольно длинные контроллеры.