サイトのページにアクセスする前に、すべてのユーザーに強制的にログインさせたい。 Larry Ullmanのチュートリアル Yiiのすべてのページにログインを強制する に従いました。
チュートリアルによると、ログインページへのリダイレクトを回避するために、一部のページで例外を作成できます。現在のコントローラーを確認するために、$_GET
値。私の問題は、urlManager
を使用してURLと$_GET
はヌル値を返します。クラスのスコアで現在のコントローラーとアクションを取得するために使用できる方法はありますか?
私は次を試しましたが、私のコンポーネントクラスのスコープではアクセスできません:
Yii::app()->controller->getId
はい、現在のcontroller/action
ルート、urlManager
ルールを逆にすることにより:
Yii::app()->urlManager->parseUrl(Yii::app()->request)
試しましたか:
Yii::app()->controller->id
そして:
Yii::app()->controller->action->id
?
Yii2のように
現在のcontroller name
Yii::$app->controller->id
現在のcontroller object
Yii::$app->controller
現在のaction name
:
Yii::$app->controller->action->id
現在のroute
:
Yii::$app->requestedRoute
Yii2を使用して、以下で現在のコントローラーオブジェクトを取得します。
Yii::$app->controller
コントローラから、次を使用して現在のアクションを文字列として取得します。
Yii::$app->controller->action->id
Yii2の場合:
Yii::$app->controller->id
を呼び出す際の問題は、どこかで呼び出すと(例:最上位の抽象コントローラーのいずれかで)、Yii::$app->controller
がまだインスタンス化されていない可能性があるため、エラーが返されることです。
urlManager
を直接呼び出して、リクエストをルーティングにマップします。
var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
Yii::app()->controller->getRoute()
を試してください
質問が正しければ、基本的にコントローラーにある特定のactionsへのアクセスを停止しようとしています。
これがあなたが望んでいるものである場合、それを行う正しい方法はこれです:
コントローラーでactionMethod()
を次のように作成します。
class SomeController extends CController{
public function actionSomeAction(){
... More code...
}
その後、次を使用してサイトにアクセスできます:path/to/application/controllerName/actionName
次のようなアクセス制御を行います。
/**
* @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');
}
?>
if (Yii::$app->requestedAction->id == "index") {
//do something
}