Symfony2使用init或construct方法设置类变量

时间:2013-03-14 19:20:29

标签: symfony

最近在使用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()这两个似乎都没有被调用。

有人能指出我正确的方向吗?有没有一种简单的方法可以做到这一点,还是我必须查看事件监听器?

3 个答案:

答案 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'));
    }
    ...
}