32

サイトのページにアクセスする前に、すべてのユーザーにログインを強制したいと考えています。Larry Ullman のチュートリアルForcing Login for All Pages in Yii に従いました。

チュートリアルによると、ログインページへのリダイレクトを避けるために、一部のページを例外にすることができます。現在のコントローラーを確認するために、$_GET値を確認しました。私の問題は、以前urlManagerに URL を書き換えて$_GETいて、null 値が返されたことです。クラスのスコアで現在のコントローラーとアクションを取得するために使用できる方法はありますか?

次のことを試しましたが、コンポーネント クラスのスコープではアクセスできません。

Yii::app()->controller->getId
4

8 に答える 8

49

試しましたか:

Yii::app()->controller->id

と:

Yii::app()->controller->action->id

?

于 2013-10-15T08:58:13.523 に答える
45

はい、ルールcontroller/actionを逆にすることで、現在のルートを取得できます。urlManager

Yii::app()->urlManager->parseUrl(Yii::app()->request)
于 2013-10-15T09:26:59.990 に答える
22

今のYii2のように

最新の情報を得るcontroller name

Yii::$app->controller->id

現在controller object

Yii::$app->controller

現在action name:

Yii::$app->controller->action->id

現在route:

Yii::$app->requestedRoute
于 2015-03-25T09:27:54.693 に答える
12

Yii2 を使用して、現在のコントローラー オブジェクトを取得します。

Yii::$app->controller

コントローラーから、次を使用して現在のアクションを文字列として取得します。

Yii::$app->controller->action->id
于 2014-10-24T16:20:56.440 に答える
5

試すYii::app()->controller->getRoute()

于 2013-10-15T09:02:19.087 に答える
4

正しく質問できれば、基本的に、コントローラー内の特定のアクションへのアクセスを、ログインせずにアクセスできないようにしようとしているのですか?

これが目的の場合、正しい方法は次のとおりです。

  1. actionMethod()次のようにコントローラーでaを作成します。

    class SomeController extends CController{
    
      public function actionSomeAction(){
    
        ... More code...
    
    }
    
  2. その後、以下を使用してサイトにアクセスできます: path/to/application/controllerName/actionName

  3. アクションにアクセスする前にユーザーに強制的にログインさせたい場合は、次のようにします。

次のようにアクセス制御を行います。

 /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }

/**
 * Specifies the access control rules.
 * This method is used by the 'accessControl' filter.
 * @return array access control rules
 */
public function accessRules()
{
    return array(

        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions' => array('**yourActionMethodName**'),
            'users' => array('@'),
        ),

        array('deny', // deny all users
            'users' => array('*'),
        ),
    );
}

これで、認証されたユーザーのみが URL にアクセスできるようになります。

問題が解決したことを願っています。

If you simply want to check if the user is a guest and if he is, send him to the login page everytime:

config/main.php で、次を追加します。

'defaultController' => 'controllerName/actionMethod',

そして、そのコントローラに上記のアクセス ルールを追加するだけです。現在、デフォルトでは、アクセス制御された方法でサイトを開いています。そのため、自動的にログイン ページにリダイレクトされます。

Even another method:

これをviews/layouts/main.phpに追加するだけです

<?php 

if(Yii::app()->user->isGuest)
{ 
   $this->redirect('/site/login');
}
?>
于 2013-10-15T09:11:51.393 に答える
0
if (Yii::$app->requestedAction->id == "index") {
    //do something
}
于 2016-01-25T10:51:44.787 に答える