控制器中使用 behaviors() 在方法执行前 使用指定的验证器 进行处理数据
public function behaviors() {
return [
'access' => [
'class' => AccessControl::className(), // 使用核心过滤器Access 对执行动作进行验证
'only' => ['logout'], // 对logout动作进行验证
'rules' => [ // 规则
[
'actions' => ['logout'],
'allow' => true, // 只允许认证用户进行访问
'roles' => ['@'],
],
],
],
'verbs' => [ // 设置curd动作 所运行的请求方式
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'], // post 方法
],
],
];
}
actions的理解
比如在 site/test 的时候,会先在actions方法中找对应请求的 test 方法,如果没有那么就会在控制器中找actionTest。
还有就是把公共的方法放在actions()中,这样对应要调用一些公共的静态页面的时候就可以不用谢控制器方法了。
public function actions() {
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
//返回验证
'tests'=>[
'class'=>'backend\models\TestAction',
]
];
}
13、一个控制器调用其他控制器action的方法:
方法一:
是经典的重写actions方法
public function actions()
{
return [
'error' => [
'class' => 'yii\web\ErrorAction',
],
'captcha' => [
'class' => 'yii\captcha\CaptchaAction',
'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
],
];
}
actions继承yii\base\Actions类,并重写父类的run方法。
方法二:
site控制器如下,访问MemberController控制器下面的index方法。
class SiteController extends Controller
{
public function actionIndex(){
Yii::$app->runAction('member/index', ['param'=>'123']);
}
}
MemberController控制器如下:
class MemberController extends Controller
{
public function actionIndex($param = '456'){
echo "second Controller".$param;
}
}
访问:http://www.yii.dev/site/index.html
输出:second Controller123