Php SilverStripe检查是否调用了控制器操作

Php SilverStripe检查是否调用了控制器操作,php,silverstripe,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 } 正如

有没有办法检查控制器的动作是否被调用

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
}

正如我在评论中所说,您可以将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;
} 

正如我在评论中所说,您可以将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;
} 
作为对单个控制器实例的重复操作调用的补充,您还可以使用
controller::getAction()
检查当前请求中正在执行的操作:

if ($this->getAction() === 'Bar') {
    // foo something
}
或者,如果您希望在同一请求中多次调用控制器的不同实例,您可以按照WillParky93的建议执行,但可以使用静态属性,这样状态将在不同的实例上保持。

作为备用,这将适用于对单个控制器实例的重复操作调用,您还可以使用
Controller::getAction()
检查当前请求中正在执行的操作:

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

或者,如果您希望在同一请求中多次调用控制器的不同实例,您可以按照WillParky93的建议执行,但可以使用静态属性,以便状态在不同实例上保持不变。

您不能只使用
die('Bar called')在该操作中?如果它被执行,你的浏览器中会有一个被调用的条,脚本将停止执行。但是如果他想在那之后再调用其他调用呢?他不能,因为剧本会停止。。。Iirc,您需要一个getter和setter,用于在
函数栏中设置为true的布尔值,您可以从
检查栏调用它。正确,我不希望代码停止执行。setter/getter确实是一个简单的解决方案。不过,我想知道框架中是否有内置函数。啊,我不确定。我不熟悉银条。但我可以说这听起来像是一个复杂的函数。最好只使用getter&setter,你不可以只使用
die('Bar called')在该操作中?如果它被执行,你的浏览器中会有一个被调用的条,脚本将停止执行。但是如果他想在那之后再调用其他调用呢?他不能,因为剧本会停止。。。Iirc,您需要一个getter和setter,用于在
函数栏中设置为true的布尔值,您可以从
检查栏调用它。正确,我不希望代码停止执行。setter/getter确实是一个简单的解决方案。不过,我想知道框架中是否有内置函数。啊,我不确定。我不熟悉银条。但我可以说这听起来像是一个复杂的函数。最好只使用getter&setter,因为allOkay之后有一个内置的操作,所以paradoxal的作用是,在控制器的
Init
方法中调用它时,它总是返回
NULL
。当在“active”控制器方法中调用时,它会工作并说明明显的情况。因此allOkay之后有一个内置的操作,所以paradoxal的作用是,在控制器的
Init
方法中调用它时,它总是返回
NULL
。当在“主动”控制器方法中调用时,它会工作并说明明显的错误。