2011-12-01 59 views
1

如何在不使用sfContext::getInstance()的情况下在symfony模型中传递会话变量?如何在模型中获得Symfony会话变量?

+3

一些更多的信息将受到欢迎?你的模型需要什么样的“会话”变量?它在哪里创建/分配,需要什么地方等等。因为,当你在模型中需要'sfContext :: getInstance()'时,通常它是一个坏模型的标志,就像你说的。 –

+1

你想做什么?如果您想在会话期间保留一些值,您可以将它们作为属性添加到用户,例如 –

+0

您是否在寻找使用管理生成器创建的后端应用程序? – macgyver

回答

2

推荐的方法被称为依赖注入,并且是这样的:你创建的模型文件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 
    } 
} 

这看起来笨拙, 因为它是。但是没有你回答这个问题,你想做什么?我不能给出替代方案。

推荐的文章:

+0

嗨maerlyn ...如上所述我在lib类中使用userid setAttribute ...我需要在保存方法内访问模型类中的会话...但我知道sfContext :: getInstance()是坏主意,所以我正在寻找替代.. – Pushparaj

+0

我明白,并给了你一个选择。但没有告诉你为什么需要这个ID,我不能给出更好的选择。 – Maerlyn

+0

@Maerlyn:我以同样的方式尝试过。但是我无法在模型中获得用户ID。$ this - > _ user在保存函数时返回空。帮帮我。 – Gowri

-1

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

// 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'); 
} 
+1

这绝不是问题的答案。 – Maerlyn

+0

Pibeiro并没有寻找答案你给...我要求在保存方法内使用sfContext :: getInstance()来获取模型类中的会话... – Pushparaj

+0

但是从哪里存储模型?你必须从行动中保存它吗? –