6

I am redirecting from one action (executeProcess) to another (executeIndex). I want to be able to pass a parameter/variable along, without using GET (e.g. $this->redirect('index', array('example'=>'true')))

Is there a way I can directly pass parameters without having it directly displayed in the URL? (e.g. POST). thanks.

whamsicore
  • 8,320
  • 9
  • 40
  • 50

3 Answers3

7

The best way of passing a variable between two Actions is by using FlashBag

public function fooAction() {
    $this->get('session')->getFlashBag()->add('baz', 'Some variable');
    return $this->redirect(/*Your Redirect Code to barAction*/);
}

public function barAction() {
    $baz = $this->get('session')->getFlashBag()->get('baz');
}

To use the variable in Twig template use this --

{% for flashVar in app.session.flashbag.get('baz') %}
    {{ flashVar }}
{% endfor %}
Pratyush
  • 1,206
  • 14
  • 13
6

Why dont you use sessions to store values before redirecting, and then getting them on the other action after you redirected? like:

class ActionClass1 extendes sfActions
{
  public function executeAction1(sfWebRequest $request)
  {
    [..]//Do Some stuff
    $this->getUser()->setAttribute('var',$variable1);
    $this->redirect('another_module/action2');
  }
}

class ActionClass2 extends sfActions
{
  public function executeAction2(sfWebRequest $request)
  {
    $this->other_action_var = $this->getUser()->getAttribute('var');
    //Now we need to remove it so this dont create any inconsistence
    //regarding user navigation
    $this->getUser()->getAttributeHolder()->remove('var');
    [...]//Do some stuff
  }
}
guiman
  • 1,334
  • 8
  • 13
2

Another solution that does not redirect the browser

class someActionClass extends sfActions{
  function myExecute(){
    $this->getRequest()->setParameter('myvar', 'myval');
    $this->forward('mymodule', 'myaction')
  }
}


//Here are your actions in another module

class someActionClass2 extends sfActions{
  function myExecute2(){

    $myvar = $this->getRequest()->getParameter('myvar');

  }
}

`

Lyubo
  • 73
  • 8