正如我们在控制器中看到的那样,CController中有一个函数missingAction($ actionID)。通过使用此功能,我可以简单地告诉我的应用程序,当控制器中缺少一个操作时它应该做什么。
public function missingAction($actionId) {
throw new CHttpException(404, Yii::t('yii', 'The system is unable to find the requested action "{action}".', array('{action}' => $actionId == '' ? $this->defaultAction : $actionId)));
}
是否有任何这样的功能通过过度摆脱我可以简单地为控制器实现相同的东西。即missController有点事。
也有可用于模块的任何此类功能或任何配置,因此如果找不到一个模块,可以处理它吗?
答案 0 :(得分:1)
我不确定是否有任何可以覆盖的功能,但您可以在配置的onBeginRequest
文件中使用main.php
行为来检查控制器是否存在。这是一个例子:
在名为protected/components
的{{1}}文件夹中创建一个文件。现在ControllerCheck.php
的内容:
ControllerCheck.php
现在,只要应用程序处理请求,就必须调用此行为,为此打开<?php
/**
* ControllerCheck Component to check if controller exists
*/
class ControllerCheck extends CBehavior
{
public function attach($owner)
{
$owner->attachEventHandler('onBeginRequest', array($this, 'handleBeginRequest'));
}
public function handleBeginRequest($event)
{
$path = explode("/", Yii::app()->request->pathInfo);
if($path[0] != "site") {// you could add as many controllers name as you want or you could use php in_array function
$redirectUrl = Yii::app()->createUrl('myController/myAction');
Yii::app()->request->redirect($redirectUrl);
}
}
}
中的main.php
文件并添加以下内容:
protected/config
多数民众赞成。因此,在这种情况下,如果请求return array(
...
'behaviors' => array(
'onBeginRequest' => array(
'class' => 'application.components.ControllerCheck'
)
),
);
以外的控制器,则会重定向到site
。
希望能给出一个想法。