SilverStripe检查是否调用了Controller操作

时间:2017-09-19 11:27:09

标签: php 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
}

2 个答案:

答案 0 :(得分:1)

正如我在评论中所说,你可以使用带有布尔变量的getter和setter并检查它。

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;
} 

答案 1 :(得分:1)

作为WillParky93's answer的旁边,它适用于单个控制器实例上的重复操作调用,您还可以使用Controller::getAction()来检查当前请求中正在执行的操作:

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

或者,如果您希望在同一个请求中多次调用控制器的不同实例,则可以执行WillParky93建议的操作,但使用静态属性,以便状态将持续存在于不同的实例上。