Невозможно включить и использовать метод компонента в контроллере

Я использую CakePHP 2.8.3 и пытаюсь использовать этот компонент в моем контроллере, но я получаю эту ошибку, Кто-нибудь испытал то же самое, пожалуйста, помогите.

Неустранимая ошибка: вызов заголовка функции-члена () для необъектного файла: /mnt/hgfs/Projects/dev_kp/lib/Cake/Controller/Controller.php
Строка: 779 Примечание: если вы хотите настроить это сообщение об ошибке, создайте

Приложение /View/ Ошибки /fatal_error.ctp

//Controller
    <?php

    App::uses('AppController', 'Controller');

    class UsersController extends AppController
    {
        public $name = 'Users';
        public $components = array('UserAuth');
        public $uses = array('User');

        public function dashboard()
        {
            echo $this->UserAuth->ValidateUser();
        }
    }
    ?>

    //Component
    <?php

    App::uses('Component', 'Controller');

    class UserAuthComponent extends Component
    {

        public function ValidateUser()
        {
           if(isset($_SESSION["USER_VALIDATE"]))
           {
              if($_SESSION["USER_VALIDATE"] == TRUE)
                 return TRUE;
           }
           else
           {
              $direct = new AppController();
              $direct->redirect(array('controller' => 'users', 'action' => 'login'));
            }
         }
     }
    ?>

1 ответ

Решение

Перво-наперво

CakePHP поставляется с уровнем аутентификации, поэтому практически нет необходимости реализовывать свой собственный. Если вам нужна настраиваемая аутентификация, вы должны реализовать ее с использованием пользовательских аутентификационных объектов, см

Что, как говорится

То, что вы делаете, это не то, как работает CakePHP, вы не создаете экземпляры контроллеров вручную, а также не имеете доступа к суперглобалам, таким как $_SESSION напрямую, вместо этого вы используете абстрактные интерфейсы, которые предоставляет CakePHP.

Прежде чем создавать код, прочитайте документы и убедитесь, что вы понимаете API, с которыми работаете.

Как видите, компоненты получают ссылку на контроллер, на котором они используются при каждом обратном вызове, поэтому, если вам нужен доступ к функциям контроллера, используйте эту ссылку. Если вам нужно использовать его позже, сохраните его в свойстве, например

protected $_controller = null;

public function initialize(Controller $controller) {
    $this->_controller = $controller;
}

public function ValidateUser() {
    // ...
    $this->_controller->redirect(/* ... */);
}

Сеанс может быть легко доступен через компонент сеанса, который вы можете включить в свой пользовательский компонент, например

public $components = array('Session');

public function ValidateUser() {
    // ...
    $value = $this->Session->read('USER_VALIDATE');
}
Другие вопросы по тегам