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

クラス内のすべてのメソッドにチェックを入れることを選択することになりました。それをしなければならないのはばかげているようですが、ZFのようなinit、postDispatchタイプのメソッドがないため、Symfony2でそれをしなければならないことがよくあります。

別のメソッドへのチェックを削除しようとしても、$ 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 に答える
0

公式ドキュメントのようにセッションを取得しようとしましたか?

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

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

基本的getにコンテナから依存関係をフェッチし、コントローラ内のコンテナはセッター依存性注入を使用して注入されます。あなたはまだコンテナを持ってい__constructません。

于 2013-03-14T19:28:04.563 に答える