最近在使用ZF一段时间后一直在使用Symfony2。
我认为我在尝试做一些相对简单的事情时遇到了问题。
以下代码位于控制器内:
private $current_setid = "";
public function __construct() {
$current_set = $this->getCurrentSet();
if ($current_set == "") {
return $this->redirect($this->generateUrl('selectset'));
}
$this->current_setid = $current_set;
}
public function getCurrentSet() {
$session = $this->get("session");
$set = $session->get('set');
return $set;
}
public function setCurrentSet($setid) {
$session = $this->get("session");
$session->set('set', "$setid");
}
如果我使用__construct(),我会收到如下错误:
Fatal error: Call to a member function get() on a non-object in
我尝试过使用__init()和init()这两个似乎都没有被调用。
有人能指出我正确的方向吗?有没有一种简单的方法可以做到这一点,还是我必须查看事件监听器?
答案 0 :(得分:0)
您是否尝试过像在官方documentation中那样举办会议?
$session = $this->getRequest()->getSession();
$foo = $session->get('foo');
答案 1 :(得分:0)
基本上get
使用setter dependency injection注入Controller中容器和容器的依赖关系。你还没有__construct
时间的容器。
答案 2 :(得分:0)
刚刚结束选择对班级中的每个方法进行检查。似乎很难做到这一点,但我发现我经常不得不在Symfony2中做这个,因为缺少init,postDispatch类型的方法,如ZF。
即使尝试将支票移至另一种方法也是反效果,因为我仍然必须检查该方法的返回,因为$ this->重定向似乎不起作用,除非它在Action方法中。例如:
public function isSetSet() {
$current_set = $this->getCurrentSet();
if ($current_set == "") {
$url = $this->generateUrl('selectset');
return $this->redirect($url);
}
return TRUE;
}
public function someAction() {
$check = $this->isSetSet();
if($check != TRUE){
return $check;
}
...
}
所以每个方法都需要4行检查,但是整个检查可以在4行中完成,所以不需要额外的方法:
public function anotherAction() {
$current_setid = $this->getCurrentSet();
if ($current_setid == "") {
return $this->redirect($this->generateUrl('selectset'));
}
...
}