2017-09-19 3 views
0

コントローラの動作が呼び出されているかどうかを確認する方法はありますか?SilverStripeコントローラの動作が呼び出されているかどうかを確認

private static $url_handlers = array(
    '$Foo!' => 'Bar' 
); 

// action 'Bar' is allowed ... 

public function Bar(SS_HTTPRequest $request) { 
    // method body 
} 

public function checkBar() { 
    // Check if Bar is called 
} 
+0

あなたはそのアクションの中で 'die( 'bar');を使うことができませんでしたか?実行されると、ブラウザに**バーが表示され、スクリプトは実行を停止します。 – teeyo

+0

しかし、その後に他の呼び出しを実行したい場合はどうしますか?彼はスクリプトが止まってしまったのでできないだろう... Iirc、 'checkBar'から呼び出せる' function bar'でtrueに設定したブーリアンのgetterとsetterが必要です。 – IsThisJavascript

+0

正解、私コードの実行を停止しないでください。セッター/ゲッターは実際には簡単な解決策です。それでも、フレームワークに組み込み関数があるかどうかを知りたい。 – Faloude

答えて

1

繰り返しアクションのために働くであろうさておきWillParky93's answerに、単一のコントローラインスタンスを呼び出し、あなたはまた、現在の要求で実行されているアクションをチェックするController::getAction()を使用することができます。

if ($this->getAction() === 'Bar') { 
    // foo something 
} 

あるいは、コントローラの異なるインスタンスが同じリクエストで複数回呼び出されることを期待している場合は、WillParky93が提案したことを実行できますが、代わりに静的プロパティを使用して、状態が異なるインスタンス上に保持されます。

+0

なので、組み込みのアクションがあります。 – Faloude

+0

これは逆説的なことです。コントローラーの 'Init'メソッドでこれを呼び出すときに常に' NULL'を返します。 「アクティブな」コントローラメソッドで呼び出されると、それは動作し、明白です。 – Faloude

1

私がコメントで述べたように、ブール変数を持つゲッターとセッターを使用してチェックすることができます。

private static $url_handlers = array(
'$Foo!' => 'Bar' 
); 

// action 'Bar' is allowed ... 

private $barCalled = false; 

public function setBar($value){ 
    $this->barCalled = $value; 
} 

public function Bar(SS_HTTPRequest $request) { 
    if(!$this->barCalled){ 
     // method body 
     $this->setBar(true); 
    } 
} 


public function checkBar() { 
    // Check if Bar is called 
    return $this->barCalled; 
} 
関連する問題