独立动作 ¶
如果动作足够通用,把它实现在一个单独类中有助于代码复用。创建 actions/Page.php
namespace app\actions;
class Page extends \yii\base\Action
{
public $view = 'index';
public function run()
{
return $this->controller->render($this->view);
}
}
下面的代码偏简单,不过还是可以说明独立动作是如何工作的。独立动作可以在控制器中使用如下:
class SiteController extends \yii\web\Controller
{
public function actions()
{
return [
'about' => [
'class' => 'app\actions\Page',
'view' => 'about',
],
];
}
}
接下来你就可以通过URL http://example.com/?r=site/about
来访问这个动作。
捕获所有请求 ¶
有时候需要在单个控制器动作中处理所有请求。比如当网站处于维护状态时显示一个提示信息。要这样做,你应该动态的或者通过应用程序配置来设置web应用的 catchAll
属性:
return [
'id' => 'basic',
'basePath' => dirname(__DIR__),
// ...
'catchAll' => [ // <-- here
'offline/notice',
'param1' => 'value1',
'param2' => 'value2',
],
]
上述代码中的 offline/notice
指向 OfflineController::actionNotice()
。 param1
和 param2
是传入动作方法的参数。