2010-06-17 6 views
1

J'essaie de passer des paramètres d'une action (foo) à une autre (foobar).Pourquoi ce code symfony ne fonctionne pas?

Dans l'action foo, je mis les arguments ainsi:

$request->getParameterHolder()->set('arg1', 'alice'); 
$request->getParameterHolder()->set('arg2', 'bob'); 

Dans l'action foobar, je tente de récupérer les params ainsi:

$arg1 = $request->getParameter('arg1'); 
$arg2 = $request->getParameter('arg2'); 

$this->forward404Unless($arg1 && $arg2); //always forwarded 

Note: Je suis conscient que je peux sauver la params dans la variable de session de l'utilisateur - mais je ne veux pas faire cela. Je veux les passer en paramètres - des idées pour que cela fonctionne?

Répondre

2

Vous pouvez simplement essayer:

$this->redirect('module/action2?'. 
     http_build_query(array("arg1"=> "alice", "arg2"=>"bob"))); 
+0

D'oh! - J'avais oublié de http_build_query(). Pourquoi j'aime toujours rendre les choses plus compliquées;) +1 pour le soln simple et élégant. – morpheous

1

réponse de greg0ire sonne comme c'est ce que vous demandez, mais il y a deux ou trois autres approches qui pourraient être intéressant de regarder si le passage des paramètres de chaîne de requête n'est pas un exigence dure.

Vous pouvez utiliser un forward si vous souhaitez que l'action foobar s'exécute après foo. Contrairement à une redirection, cela va vivre dans le même cycle de demande afin que vous puissiez passer des variables sans toucher à la session.

Vous ne dites pas pourquoi vous ne voulez pas utiliser la session mais il existe une maison de transition dans Symfony: flash attributes. Ceux-ci sont stockés dans la session mais sont garantis pour ne pas vivre au-delà de la prochaine demande qui peut être un compromis approprié.

+0

@sponz: Je ne veux pas non plus utiliser l'attribut flash;) J'aurais dû expliquer, j'utilise une API publique qui attend une requête GET avec tous les paramètres attachés. Votre astuce sur l'avant explique pourquoi l'extrait que j'ai posté fonctionne parfois. En vérifiant mon code, j'ai trouvé l'occasion sur laquelle cela fonctionnait, j'avais fait un forward. +1 pour cela – morpheous

+0

Je savais que ce n'était pas la réponse que vous cherchiez, mais je suis content que cela vous a aidé. Les différentes façons de transmettre des données entre les actions de Symfony et leurs conséquences peuvent être un peu déroutantes. Principalement pour le faire apparaître dans les réponses liées, voici une de mes réponses précédentes sur le sujet: http://stackoverflow.com/questions/2896274/symfony-trying-to-retrieve-a-variable-saved-using- sfcontextgetinstance/2896341 # 2896341 –

Questions connexes