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

Symfony2使用init或construct方法设置类变量,symfony,Symfony,在使用ZF一段时间后,最近一直在使用Symfony2 我想,我在尝试做一些相对简单的事情时遇到了问题 以下代码位于控制器内: private $current_setid = ""; public function __construct() { $current_set = $this->getCurrentSet(); if ($current_set == "") { return $this->redirect($this->gener

在使用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
我尝试过使用uu init()和init(),这两个函数似乎都没有被调用


谁能给我指出正确的方向吗?有没有一种简单的方法可以做到这一点,或者我必须调查事件的听众吗?

你是否尝试过像官方那样进行会话


基本上,
get
fetch依赖项来自容器,控制器中的容器使用注入。在
\uu构造
时,您还没有容器。

只是选择在类中的每个方法中放置一个检查。这样做似乎很愚蠢,但我发现我经常不得不在Symfony2中这样做,因为缺少像ZF这样的init、postDispatch类型的方法

即使尝试删除对另一个方法的检查也会适得其反,因为我仍然必须检查该方法的返回,因为$this->redirect似乎不起作用,除非它在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'));
    }
    ...
}

嗯,奇怪。正在使用Symfony\Component\HttpFoundation\Response命名空间?是的,如果重载构造函数,则应调用父项::\uu construct first-alsoFatal错误:无法在中调用构造函数。。。使用父项::_构造();请检查一下,基本上你是说没有一个简单的方法可以做到这一点-它必须通过事件侦听器来完成?我认为你应该考虑将它放在kernel.request或kernel.controller的事件侦听器中。这里的架构不同于ZF2和其他框架。感谢您的建议。我将对此进行调查。花几个小时,并完成为此设置侦听器的过程。一旦你知道怎么做,这真的很容易。而且非常强大。总是很难从一个框架过渡到另一个框架。但了解新版本的细节通常是值得的。
public function anotherAction() {
    $current_setid = $this->getCurrentSet();
    if ($current_setid == "") {
        return $this->redirect($this->generateUrl('selectset'));
    }
    ...
}