CakePHP - вызов функции-члена allow () при ошибке не объекта - PullRequest
0 голосов
/ 10 января 2012

Я создаю одно приложение для аутентификации при входе в CakePHP и получение этой фатальной ошибки: вызов функции-члена allow () для необъекта в /var/www/cakephp1/app/Controller/users_controller.php в строке 5

и это мой код контроллера users_controller.php

<?php
class UsersController extends AppController {
    public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add');
    }
    public function add() {
        if (!empty($this->data)) {
            $this->User->create();
            if ($this->User->save($this->data)) {
                $this->Session->setFlash('User created!');
                $this->redirect(array('action'=>'login'));
            } else {
                $this->Session->setFlash('Please correct the errors');
            }
        }
        $this->set('groups', $this->User->Group->find('list'));
    }
    public function login() {
    }
    public function logout() {
        $this->redirect($this->Auth->logout());
    }
    public function dashboard() {
        $groupName = $this->User->Group->field('name', 
            array('Group.id'=>$this->Auth->user('group_id'))
        );
        $this->redirect(array('action'=>strtolower($groupName)));
    }
    public function user() {
    }
    public function administrator() {
    }
    public function manager() {
    }
}
?>

app_controller.php

<?php
class AppController extends Controller {
    public $components = array(
        'Acl',
        'Auth' => array(
            'authorize' => 'actions',
            'loginRedirect' => array(
                'admin' => false,
                'controller' => 'users',
                'action' => 'dashboard'
            )
        ),
        'Session'
    );
}
?>

Просмотр login.ctp

<?php
echo $this->Form->create(array('action'=>'login'));
echo $this->Form->inputs(array(
    'legend' => 'Login',
    'username',
    'password',
    'remember' => array('type' => 'checkbox', 'label' => 'Remember me')
));
echo $this->Form->end('Login');
?>

Я использую CakePHP версии 1.3

Ответы [ 3 ]

3 голосов
/ 21 ноября 2014

1.Решение: все, что вам нужно сделать, это добавить эту строку в ваш UsersController :

public $components = array('Auth');

или

2.Soluton: In UsersController:

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

class UsersController extends AppController {

}

, а затем в AppController :

public $components = array('Auth');
2 голосов
/ 24 июля 2013

Существует две распространенные причины этого типа ошибки:

Файл контроллера приложения не загружается

Если класс AppController не существует - Cake будет использовать запасной вариантпоскольку это взято из ядра - это просто пустой класс.Для возникновения ошибки в вопросе - компонент Auth не был загружен, наиболее вероятной причиной этого является то, что файл app/app_controller.php либо не существует, либо другой файл класса AppController был загружен перед просмотром

Это можно подтвердить, используя get_included_files , например:

class UsersController extends AppController {

    public function beforeFilter() {
        if (!isset($$this->Auth)) {
            debug(get_included_files());
            die;
        }

Найдите , который app_controller.php файл был загружен -если это , а не файл, содержащий класс в вопросе, это проблема.

Переопределенный конструктор, не вызывающий родителя

Хорошие дети всегда вызывают своих родителей:)

Если конструктор (или любой метод) переопределен и не вызывает родительскую функцию , то, например, свойство компонентов не будет корректно объединено / установлено или классы компонентов не будут инициализированы.

Если загружается правильный файл app_controller.php, сосредоточьтесь на методах, определенных в классах контроллера, и проверьте, что они вызывают parent :: methodname (для контроллера пользователей и контроллера приложения).В частности, убедитесь, что вызывается конструкция Controller :: __, поскольку именно там большая часть логики инициализации класса находится в версии 1.3.

0 голосов
/ 10 января 2012

Ошибка звучит как ошибка загрузки компонента Auth. Вы пытались удалить настройки из массива $ компоненты и посмотреть, не исчезнет ли ошибка?

...