web-dev-qa-db-ja.com

Yiiで現在のコントローラーとアクションIDを取得する

サイトのページにアクセスする前に、すべてのユーザーに強制的にログインさせたい。 Larry Ullmanのチュートリアル Yiiのすべてのページにログインを強制する に従いました。

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

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

Yii::app()->controller->getId
30
Hamid Ghorashi

はい、現在のcontroller/actionルート、urlManagerルールを逆にすることにより:

Yii::app()->urlManager->parseUrl(Yii::app()->request)
45
eXtreme

試しましたか:

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

そして:

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

44
Korcholis

Yii2のように

現在のcontroller name

Yii::$app->controller->id

現在のcontroller object

Yii::$app->controller

現在のaction name

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

現在のroute

Yii::$app->requestedRoute
16
Kuldeep Dangi

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

Yii::$app->controller

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

Yii::$app->controller->action->id
11
Marco Moreno

Yii2の場合:

Yii::$app->controller->idを呼び出す際の問題は、どこかで呼び出すと(例:最上位の抽象コントローラーのいずれかで)、Yii::$app->controllerがまだインスタンス化されていない可能性があるため、エラーが返されることです。

urlManagerを直接呼び出して、リクエストをルーティングにマップします。

var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
8
Jinsong Li

Yii::app()->controller->getRoute()を試してください

4
CreatoR

質問が正しければ、基本的にコントローラーにある特定のactionsへのアクセスを停止しようとしています。

これがあなたが望んでいるものである場合、それを行う正しい方法はこれです:

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

    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');
}
?>
4
Sankalp Singha
if (Yii::$app->requestedAction->id == "index") {
    //do something
}
0
sergey