0

の次のコードを参照してください

<?php

class DefaultController extends Controller
{

    public function actionIndex()
    {
        $this->render('index');
    }

    /**
     * Displays the login page
     */
    public function actionLogin()
    {
        $model = new LoginForm;

        // collect user input data
        if (isset($_POST['LoginForm']))
        {
            $model->attributes = $_POST['LoginForm'];
            // validate user input and redirect to the previous page if valid
            if ($model->validate() && $model->login())
                $this->redirect(Yii::app()->user->returnUrl);
        }
        // display the login form
        $this->render('login', array('model' => $model));
    }

    public function filters()
    {
        return array(
            'accessControl',
        );
    }

    public function accessRules()
    {
        return array(
            array('allow', // allow all users to perform the 'login' action
                'actions' => array('login'),
                'users' => array('*'),
            ),
            array('allow', // allow the admin user to perform everything
                'actions' => array('*'),
                'users' => array('@'),
            ),
            array('deny', // deny all users
                'users' => array('*'),
            ),
        );
    }

}

問題は、モジュールに移動すると、既定のサイト コントローラー/?r=adminにリダイレクトされることです。/?r=site/index

これはどのように起こりますか?

編集:(AdminModuleを追加)

<?php

class AdminModule extends CWebModule
{

    public function init()
    {
        // this method is called when the module is being created
        // you may place code here to customize the module or the application
        // import the module-level models and components
        $this->setImport(array(
            'admin.models.*',
            'admin.components.*',
        ));

        $this->setComponents(array(
            'user' => array(
                'loginUrl' => Yii::app()->createUrl('admin/default/login'),
            )
        ));
    }

    public function beforeControllerAction($controller, $action)
    {
        if (parent::beforeControllerAction($controller, $action))
        {
            // this method is called before any module controller action is performed
            // you may place customized code here

            return true;
        }
        else
            return false;
    }

}

ご覧のとおり、setComponents を介して loginUrl を追加しましたが、これも機能しません。

4

2 に答える 2

2

ログインしているユーザーがいない場合は、アクセス制御フィルターが作動して「ホーム」にリダイレクトされます。コントローラで実行できる唯一のアクションは「ログイン」であるため、インデックスは拒否されたアクションの一部です。

于 2012-06-21T14:57:12.070 に答える
1
class MyModule extends CWebModule
{

    public function init()
    {

        ...

        Yii::app()->setComponents(array(
            'user'=>array(
                'class'=>'CWebUser',
                'stateKeyPrefix'=>'My',
                'loginUrl'=>Yii::app()->createUrl($this->getId().'/default/login'),
            ),
        ), false);

       ...
于 2012-07-22T07:24:36.390 に答える