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

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

Неустранимая ошибка: вызов функции-члена header () для необъекта
Файл: /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'));
}
}
}
?>

2

Решение

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

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');
}
1

Другие решения

Других решений пока нет …