Получить текущий контроллер и действие в Yii
Я хочу заставить всех пользователей войти в систему перед доступом к страницам моего сайта. Я следовал учебнику Ларри Уллмана принудительный вход для всех страниц в Yii.
по данным учебника вы можете сделать исключение для некоторых страниц, чтобы избежать перенаправления на страницу входа в систему. Чтобы проверить текущий контроллер, он проверил $_GET
значение. Моя проблема в том, что я использовал urlManager
переписать URL и $_GET
дает мне значение null. Есть ли способ я могу использовать чтобы получить текущий контроллер и действие в счете моего класса?
я попробовал следующее, Но он недоступен в области моего класса компонентов:
Yii::app()->controller->getId
8 ответов
Да, вы можете получить текущее controller/action
маршрут, поменяв urlManager
правила:
Yii::app()->urlManager->parseUrl(Yii::app()->request)
как сейчас в Yii2
вам ток!--4-->
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))
если я правильно понял ваш вопрос, вы в основном пытаетесь остановить доступ к определенным действия в контроллере от доступа без входа в систему правильно?
если это то, что вам нужно, правильный метод сделать это так:
-
сделать
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
:
просто добавьте в тег просмотров/макеты/главная.в PHP
<?php
if(Yii::app()->user->isGuest)
{
$this->redirect('/site/login');
}
?>