2013-06-27 4 views
5

Ich habe ein seltsames Verhalten mit meinen Formen in Laravel 4. Ich habe eine "Einstellungen" -Seite mit zwei Formen, jeder (soll) POST zu einer Controller-Methode, aktualisieren Sie die Datenbank und kehren Sie zurück zur Einstellungsseite. Es scheint jedoch ein Problem zu geben, entweder mit der Art, wie meine Formulare funktionieren, oder mit meinen Routen.Laravel 4 - Mehrere Formulare auf derselben Seite?

Hier ist, wie es ist, vereinfacht:

Seite Einstellungen: (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> 

Also im Grunde zwei getrennte Formen auf der gleichen Seite, die zwei separate Methoden in der Post selbe Controller - wenn die Methode erfolgreich ist, leitet sie sie zurück zu "Einstellungen". Ich werde die Methoden nicht veröffentlichen, sie da getestet und sie funktionieren, glaube ich, das Problem in der Routen-Datei:

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]'); 

    }); 
}); 

Jetzt bin ich ziemlich sicher, dass es nicht mag die beiden POST-Routen sind so, aber ich kann mir keinen anderen Weg vorstellen, da die Formulare auf der gleichen Seite sind. Ich bekomme den Fehler:

Unknown action [[email protected]]. 

Da die Option Form zuerst kommt, denke ich. Wenn ich den Open-Form-Blade-Code herausnehme (für beide), lädt er die Seite - aber offensichtlich tut das Formular nichts.

Jede Hilfe wäre nett! Danke im Voraus.

Antwort

2

Sie können nicht zwei gleiche Routen für verschiedene Aktionen hinzufügen, da sie an die erste übereinstimmende Route und in Ihrem Fall an [email protected] weitergeleitet werden. Ändern Sie Ihre Routen zu:

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

als in den beiden Aktionen, die Sie umleiten zu ‚/‘: return Redirect::back(), und wenn Fehler aufgetreten war:

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

Meine alternative Lösung hierfür ist eine versteckte HTML erstellen geben Sie in jedes Formular ein und lassen Sie den Controller in diesem Feld angeben, wofür gesendet wird. Sie können also nur eine Route für beide verwenden.