Übergeben von Objekten über Controller in symfony2
Ich bin sehr verwirrt..
Ich bin mit Symfony2.3.
Ich habe einen controller, der vorne auf einem separaten controller, wenn ein Formular abgeschickt wird.
if ($form->isValid()) {
$response = $this->forward('MusicMBundle:Song:addTrackToSong', array(
'Track'=>$Track,
));
return $response;
}
Jedoch, wie gesehen werden kann, wird die Track-parameter übergeben wird, über diesen nach vorne, um die folgende (vereinfachte) Steuerung, mit einer anderen form.
public function addTrackToSongAction(Request $request, $Track){
if ($form->isValid()) {
//LOGIC
return $this->redirect($this->generateUrl('MusicMBundle_homepage'));
}
return $this->render('MusicMBundle:Song:addtracktosong.html.twig', array(
'Track' => $Track, 'form' => $form->createView(),
));
Wenn ich var_dump($Track) überall in der Funktion, es existiert und ist genau das, was ich will, es zu sein.
Jedoch, wenn das zweite Formular abgeschickt wird, symfony2 wirft die folgende Fehlermeldung:
Controller "Music\MBundle\Controller\SongController::addTrackToSongAction()" requires
that you provide a value for the "$Track" argument (because there is no default value
or because there is a non optional argument after this one).
Ganz ehrlich gesagt, ich bin verwirrt. Ich habe Zugriff auf alles, was ich brauche, aber symfony ist immer sehr wütend auf mich. Das problem könnte sein, in meinem forwarding-Strategie nehme ich an?
Hier ist mein routing-Datei, wenn das problem könnte es sein:
MusicMBundle_Song_addTrackToSong:
pattern: /addTrackToSong
defaults: { _controller: MusicMBundle:Song:addTrackToSong }
requirements:
_method: GET|POST
Ich bin ein Anfänger mit dem framework und ich weiß nur nicht, wo Sie anfangen und kann nicht finden, alles auf ihn.
Ob ich noch andere info lassen Sie mich wissen.
Vielen Dank!
- haben Sie versucht, entfernen Sie die Request-parameter und verwenden Sie
$this->getRequest()
statt - Entweder Sie zeigen auf den falschen Weg (weitergeleitet route) oder $Track sollte null sein
public function addTrackToSongAction(Request $request, $Track = null)
aber ich Stimme für das erste.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre route könnte falsch sein, denn es hat keine Parameter. Sie können versuchen, indem ein parameter für Track in die route ein, indem Sie Ihre Muster in der routing-Datei von dieser:
zu diesem:
Wenn Sie besuchen Sie die url /addTrackToSong/yourTrackValue, $Track in SongController::addTrackToSongAction Methode wird gleich yourTrackValue.
Einen anderen Weg, das problem zu lösen, wäre, durch die Einstellung ein Standardwert für $Track in deiner action Methode.
Track
- Klasse aus der controller-action und anwenden, die Ihre eigene Logik zu Holen, die richtigen Objekte. Sie können auch Ihre eigenen erstellenParamConverter
Klasse zu behandeln, es für Sie. Ich machte eine kleine gist-demonstration.Ist eine einfache und einfache Lösung zum serialisieren und Deserialisieren (im Feld getestet). Tatsächlich wandelt alle Objekte (auch arrays) in strings und zurück, so dass Sie können es verwenden, in der URLs.
Codierung ein Objekt zu string:
Decodierung einer Zeichenfolge in ein Objekt: