2013-06-27 7 views
5

У меня возникло странное поведение с моими формами в Laravel 4. У меня есть страница настроек с двумя формами, каждая из которых (должна быть) POST для контроллера, обновлять базу данных и возвращаться на страницу настроек. Однако, похоже, проблема связана с тем, как работают мои формы или моими маршрутами.Laravel 4 - Несколько форм на одной странице?

Вот как это, упрощена:

Параметры страницы: (site.com/settings)

<div id="form-one" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ Form::text('optionvalue', 'Default')) }} 
    {{ Form::submit('Save Changes') }} 
{{ Form::close() }} 

</div> 

<div id="form-two" class="form-area"> 

{{ Form::open(array('action' => '[email protected]')) }} 
    {{ Form::text('pagevalue', 'Default')) }} 
    {{ Form::submit('Save Changes') }} 
{{ Form::close() }} 

</div> 

Так в основном, два отдельных форм на той же странице, которые отправляют на двух отдельных методов в тот же самый контроллер - когда метод будет успешным, он перенаправляет их обратно в «настройки». Я не буду размещать методы, так как протестировали их, и они работают, я считаю, что проблема в файле маршрутов:

routes.php

// Checks if a session is active 
Route::group(array('before' => 'require_login'), function() 
{ 
    Route::group(array('prefix' => 'settings'), function() 
    { 
     Route::get('/', '[email protected]'); 
     Route::post('/', '[email protected]'); 
     Route::post('/', '[email protected]'); 

    }); 
}); 

Теперь я уверен, что это не нравится оба маршрута POST подобны этому, однако я не могу придумать другой способ сделать это, так как формы находятся на одной странице. Я получаю ошибку:

Unknown action [[email protected]]. 

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

Любая помощь будет приятной! Заранее спасибо.

ответ

2

Вы не можете добавить два одинаковых маршрута для разных действий, поскольку они будут переданы на первый согласованный маршрут, а в вашем случае - [email protected]. Меняйте маршруты в:

Route::post('/option', '[email protected]'); 
    Route::post('/page', '[email protected]'); 

чем в обоих действий вы можете перенаправить на «/»: return Redirect::back(), и если была произошла ошибка:

if ($validation->fails()) 
{ 
    return Redirect::to('/settings')->with_errors($validation); 
} 
0

Моя альтернативное решение этого заключается в том, чтобы создать скрытый HTML ввод в каждую форму и сделать контроллер идентифицировать, для чего отправлено в этой области. Таким образом, yu может использовать только один маршрут для обоих.