How can I pass session variable in symfony model without using sfContext::getInstance()?
2 Answers
The recommended way is called dependency injection, and works like this: you create a setUser() method in your model file, that saves the given parameter to a private property:
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
}
}
This looks clumsy, because it is. But without you answering the question what are you trying to do? I cannot give an alternative.
Recommended articles:
- What is Dependency Injection? - a post series on Fabien Potencier's blog
- Dependency Injection - the design patter in detail on wikipedia
6 Comments
Pushparaj
Hi maerlyn ...as mentioned am using setAttribute for userid in lib class...i need to access the session in model class within save method ...but i kno sfContext::getInstance() is bad idea so am looking for alternate..
Maerlyn
I understand that, and gave you an alternative. But without telling why you need the id, I cannot give a better option.
Gowri
@Maerlyn: I tried that in same way. But I unable to get user id in model.$this->_user this returns empty on save function. help me out.
Maerlyn
Are you sure you're saving the record you set the user on?
Gowri
@Maerlyn: Basically i am saving contest with current logged in user id here lib/model/Contest.class.php. I am using sfdoctrineguardplugin for authentication. How can I do this.
|
Session variables should be stored as user's attributes.
// in an action:
$this->getUser()->setAttribute('current_order_id', $order_id);
See how to get it back.
// 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');
}
3 Comments
Maerlyn
This is in no way an answer to the question.
Pushparaj
Pibeiro am not looking for the answer u gave...am asking for getting session in model class within save method without using sfContext::getInstance()...
P. R. Ribeiro
But from where are you saving the model? You gotta save it from an action right?
sfContext::getInstance()in your model, just like you said.