SilverStripe 检查控制器动作是否被调用
SilverStripe check whether Controller action 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;
}
作为 的旁白,它适用于单个控制器实例上的重复操作调用,您还可以使用 Controller::getAction()
检查当前请求中正在执行的操作:
if ($this->getAction() === 'Bar') {
// foo something
}
或者,如果您希望控制器的不同实例在同一个请求中被多次调用,您可以按照 WillParky93 的建议进行操作,但使用静态 属性 来代替,这样状态将在不同的实例中持续存在.
有没有办法检查控制器的动作是否被调用?
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;
}
作为 Controller::getAction()
检查当前请求中正在执行的操作:
if ($this->getAction() === 'Bar') {
// foo something
}
或者,如果您希望控制器的不同实例在同一个请求中被多次调用,您可以按照 WillParky93 的建议进行操作,但使用静态 属性 来代替,这样状态将在不同的实例中持续存在.