2

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

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

4

3 回答 3

0

基本上get从容器和容器中获取依赖项是使用setter 依赖注入注入的。你只是还没有容器__construct

于 2013-03-14T19:28:04.563 回答
0

您是否尝试过像官方文档中那样进行会话?

$session = $this->getRequest()->getSession();

$foo = $session->get('foo');
于 2013-03-14T19:23:42.807 回答
0

只是最终选择在类中的每个方法中进行检查。这样做似乎很愚蠢,但我发现我经常不得不在 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'));
    }
    ...
}
于 2013-03-15T05:53:37.677 回答