Неопределенная ошибка индекса CakePHP

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

Вот ошибка, которую я получаю

Notice (8): Undefined index: User [APP/View/Layouts/default.ctp, line 37] 

И вот соответствующая строка кода (помните, что это работает во всех моих других контроллерах).

 <center><font color="black"><td><?php echo $user['User']['email']; ?></td></text></center> 

Вот DemosController

 <?php // app/Controller/DemosController.php class DemosController extends AppController { public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('add','logout'); $user = $this->Demo->read(null, $this->Auth->user('id')); //this throws the error //$user = $this->Demo->User->read(null, $this->Auth->user('id')); //Fatal error: Call to a member function read() on a non-object in $this->set('user', $user); } //display the knockout table public function index($article = null) { } } из <?php // app/Controller/DemosController.php class DemosController extends AppController { public function beforeFilter() { parent::beforeFilter(); $this->Auth->allow('add','logout'); $user = $this->Demo->read(null, $this->Auth->user('id')); //this throws the error //$user = $this->Demo->User->read(null, $this->Auth->user('id')); //Fatal error: Call to a member function read() on a non-object in $this->set('user', $user); } //display the knockout table public function index($article = null) { } } 

Мне не нужна таблица в базе данных для этого контроллера. Это просто показать таблицу для демонстрационных целей. Могу я просто дать ссылку на пользователя?

 class Demo extends AppModel { public $name = 'User'; } 

Почему я могу получить доступ к этому во всех моих контроллерах, кроме этого? Является ли ситуация Model / table причиной ошибки? Если да, существует ли способ отключить использование таблицы?

Получение свойств зарегистрированного пользователя через AuthComponent

Вам не нужно передавать информацию о текущем входе пользователя в представление через «viewVar». Чтобы получить доступ к свойствам текущего входа в систему вне контроллера, используйте «статический» интерфейс AuthComponent

Внутри ваших представлений или макетов выведите такую ​​информацию;

 <p>The current users email is: <?php echo AuthComponent::user('email') ?></p> <p>The current users id is: <?php echo AuthComponent::user('id') ?></p> <p>And all properties of the user are:</p> <pre><?php print_r(AuthComponent::user());?></pre> 

См.: Доступ к зарегистрированному пользователю

Вы можете удалить эти строки из beforeFilter() ;

 $user = $this->Demo->read(null, $this->Auth->user('id')); //this throws the error //$user = $this->Demo->User->read(null, $this->Auth->user('id')); //Fatal error: Call to a member function read() on a non-object in $this->set('user', $user); 

У вас есть пара проблем:

Во-первых, когда вы не используете таблицу, вы устанавливаете для свойства $useTable модели $useTable false. Во-вторых, без таблицы, никакой вызов базы данных не будет работать (просто подключите образцы данных к таблице в любом случае, кто будет знать, если это демо?)

Он все еще упоминает, что $this->Model->read() предназначен для обновления записей. Изменение строки на следующую позволяет правильному функционированию заданного вызова:

 $this->Demo->find('first', array( 'conditions' => array( 'Demo.field' => $this->Auth->user('id') )));