Symfony1 如何在模型中获取Symfony会话变量?

Symfony1 如何在模型中获取Symfony会话变量?,symfony1,session-variables,Symfony1,Session Variables,如何在symfony模型中传递会话变量而不使用sfContext::getInstance()?会话变量应存储为用户属性 // in an action: $this->getUser()->setAttribute('current_order_id', $order_id); 看看如何找回它 // later on, in another action, you can get it as: $order_id = $this->getUser()->getAtt

如何在symfony模型中传递会话变量而不使用
sfContext::getInstance()

会话变量应存储为用户属性

// in an action: 
$this->getUser()->setAttribute('current_order_id', $order_id);
看看如何找回它

// later on, in another action, you can get it as:
$order_id = $this->getUser()->getAttribute('current_order_id', false);
if($order_id!==false)
{
    // save to DB
} else {
    $this->getUser()->setFlash('error', 'Please selected an order before you can do stuff.');
    // redirect and warn the user to selected an order
    $this->redirect('orders');
}

会话变量应存储为用户的属性

// in an action: 
$this->getUser()->setAttribute('current_order_id', $order_id);
看看如何找回它

// later on, in another action, you can get it as:
$order_id = $this->getUser()->getAttribute('current_order_id', false);
if($order_id!==false)
{
    // save to DB
} else {
    $this->getUser()->setFlash('error', 'Please selected an order before you can do stuff.');
    // redirect and warn the user to selected an order
    $this->redirect('orders');
}

推荐的方法称为依赖项注入,其工作原理如下:在模型文件中创建一个
setUser()
方法,将给定参数保存到私有属性:

class Foo {
  private $_user;

  public function setUser(myUser $user) {
    $this->_user = $user;
  }

  // ... later:

  public function save(Doctrine_Connection $conn = null) {
    // use $this->_user to whatever you need
  }
}
这看起来很笨拙,因为它是。但是如果你不回答这个问题,你想做什么?我没有别的选择

推荐文章:

  • -Fabien Povertier博客上的系列文章
  • -维基百科上的详细设计模式

推荐的方法称为依赖项注入,其工作原理如下:在模型文件中创建一个
setUser()
方法,将给定参数保存到私有属性:

class Foo {
  private $_user;

  public function setUser(myUser $user) {
    $this->_user = $user;
  }

  // ... later:

  public function save(Doctrine_Connection $conn = null) {
    // use $this->_user to whatever you need
  }
}
这看起来很笨拙,因为它是。但是如果你不回答这个问题,你想做什么?我没有别的选择

推荐文章:

  • -Fabien Povertier博客上的系列文章
  • -维基百科上的详细设计模式


欢迎提供更多信息?模型中需要什么类型的“会话”变量?它是在哪里创建/分配的,需要在哪里,等等。因为,正如您所说,当您需要模型中的
sfContext::getInstance()
时,它通常是坏模型的标志。您想做什么?如果您想在会话期间保留一些值,可以将它们作为属性添加到用户,例如,您是否正在寻找使用管理生成器创建的后端应用程序?Hi Grad。。。如前所述,我在lib类中使用setAttribute作为userid…我需要在save方法中访问model类中的会话…但我知道sfContext::getInstance()是个坏主意,所以我正在寻找替代方法…欢迎提供更多信息?模型中需要什么类型的“会话”变量?它是在哪里创建/分配的,需要在哪里,等等。因为,正如您所说,当您需要模型中的
sfContext::getInstance()
时,它通常是坏模型的标志。您想做什么?如果您想在会话期间保留一些值,可以将它们作为属性添加到用户,例如,您是否正在寻找使用管理生成器创建的后端应用程序?Hi Grad。。。如前所述,我在lib类中使用userid的setAttribute…我需要在save方法中访问model类中的会话…但我知道sfContext::getInstance()这是个坏主意,所以我在寻找替代方案…这绝不是问题的答案。Pibeiro我不是在寻找你给出的答案…我是在不使用sfContext::getInstance()的情况下在save方法中获取model类中的会话…但是你从何处保存模型?你必须从一个动作中保存它,对吗?这绝不是问题的答案。Pibeiro我不是在寻找你给出的答案…我是在不使用sfContext::getInstance()的情况下在save方法中获取模型类中的会话…但是你从哪里保存模型?你必须从一个动作中保存它,对吗?嗨,maerlyn…正如前面提到的,我在lib类中使用userid的setAttribute…我需要在save方法中访问model类中的会话…但我知道sfContext::getInstance()是个坏主意,所以我正在寻找替代方法..我理解这一点,并给了你一个替代方法。但是如果不告诉你为什么需要身份证,我就不能给你一个更好的选择。@Maerlyn:我也用同样的方法试过。但我无法在模型中获取用户id。$this->\u用户在保存函数时返回空。帮帮我。你确定你正在保存你给用户设置的记录吗?@Maerlyn:基本上,我是在这里用当前登录的用户id lib/model/contest.class.php保存竞赛。我正在使用sfdoctrineguardplugin进行身份验证。我该怎么做呢。嗨,maerlyn…正如前面提到的,我在lib类中使用setAttribute作为userid…我需要在save方法中访问model类中的会话…但我知道sfContext::getInstance()是个坏主意,所以我正在寻找替代方法..我理解这一点,并为您提供了一个替代方法。但是如果不告诉你为什么需要身份证,我就不能给你一个更好的选择。@Maerlyn:我也用同样的方法试过。但我无法在模型中获取用户id。$this->\u用户在保存函数时返回空。帮帮我。你确定你正在保存你给用户设置的记录吗?@Maerlyn:基本上,我是在这里用当前登录的用户id lib/model/contest.class.php保存竞赛。我正在使用sfdoctrineguardplugin进行身份验证。我怎样才能做到这一点。