问题
每个自定义操作都重定向回登录页面。
我的代码
我已经从dektrium'user'controllers'RegistrationController
扩展了我的自定义控制器
我的web.php
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'rules' => [
],
],
'modules' => [
'user' => [
'class' => 'dektrium'user'Module',
'controllerMap' => [
'registration' => 'app'controllers'user'RegistrationController'
],
],
],
自定义控制器
namespace app'controllers'user;
use dektrium'user'controllers'RegistrationController as BaseAdminController;
class RegistrationController extends BaseAdminController
{
public function actionPlan()
{
echo 'Test';
}
}
重写方法运行良好,但每个自定义操作(site.com/user/registration/plan
(都重定向回登录页面。
如果你想更改访问控制规则,你应该正确更改,例如:在你的站点控制器中,将计划添加到无需认证即可访问的规则中
class SiteController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'rules' => [
[
'actions' => ['login','plan', 'error'],
'allow' => true,
],
[
'actions' => ['logout', 'index'],
'allow' => true,
'roles' => ['@'],
],
],
],
'verbs' => [
'class' => VerbFilter::className(),
'actions' => [
'logout' => ['post'],
],
],
];
}
查看此了解更多信息http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
http://www.yiiframework.com/doc-2.0/yii-filters-accesscontrol.html
另一种实现
class SiteController extends Controller
{
/**
* @inheritdoc
*/
public function behaviors()
{
$behaviors = [
'access' => [
'rules' => [
[
'actions' => ['login', 'plan', 'error'],
'allow' => true,
],
],
],
];
return ArrayHelper::merge($behaviors, parent::behaviors());
}
}