Я использую 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'));
}
}
}
?>
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');
}
Других решений пока нет …