Я пытаюсь получить доступ к адресу электронной почты для входа пользователя, и я могу сделать это успешно во всех моих Контроллерах, кроме одного.
Вот ошибка, которую я получаю
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 причиной ошибки? Если да, существует ли способ отключить использование таблицы?
Вам не нужно передавать информацию о текущем входе пользователя в представление через «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') )));