Подтвердить что ты не робот

Получить текущий контроллер и идентификатор действия в Yii

Я хочу заставить всех пользователей войти в систему до доступа к страницам моего сайта. Я следил за учебником Larry Ullman Принудительный вход для всех страниц в Yii.

В соответствии с учебным пособием вы можете сделать исключение для некоторых страниц, чтобы избежать перенаправления на страницу входа в систему. Чтобы проверить текущий контроллер, он проверил значение $_GET. Моя проблема в том, что я использовал urlManager для перезаписи URL-адреса, а $_GET дал мне нулевое значение. Есть ли какой-либо метод, который я могу использовать для получения текущего контроллера и действия в оценке моего класса?

Я попробовал следующее, но он недоступен в области моего класса компонента:

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

Ответ 1

Да, вы можете получить текущий маршрут controller/action, изменив правило urlManager:

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

Ответ 2

Вы пытались:

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

и

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

?

Ответ 3

Как теперь в Yii2

получить текущий controller name

Yii::$app->controller->id

current controller object

Yii::$app->controller

current action name:

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

Ответ 4

Используя Yii2, получите текущий объект контроллера с помощью:

Yii::$app->controller

Из контроллера, получите текущее действие в виде строки, используя:

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

Ответ 5

В Yii2:

Проблема вызова Yii::$app->controller->id заключается в том, что когда вы вызываете ее где-нибудь (например: в одном из абстрактного контроллера верхнего уровня), Yii::$app->controller может не создаваться, поэтому он вернет ошибку.

Просто позвоните urlManager, чтобы запросить маршрут для маршрута:

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

Ответ 6

Если вы правильно зададите вопрос, вы в основном пытаетесь остановить доступ к определенным действиям в контроллере из-за доступа без права входа в систему?

Если это то, что вам нужно, правильный способ сделать это:

  • Сделайте 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:

Просто добавьте это в представления /layouts/main.php

<?php 

if(Yii::app()->user->isGuest)
{ 
   $this->redirect('/site/login');
}
?>

Ответ 7

Попробуйте Yii::app()->controller->getRoute()

Ответ 8

if (Yii::$app->requestedAction->id == "index") {
    //do something
}