Я создал простую форму входа в систему с помощью Cake Php.Когда я нажимаю кнопку «Войти», появляется одно предупреждение
Illegal offset type [CORE\Cake\Model\Model.php, line 2734
Я использую ссылку в качестве ссылки http://bakery.cakephp.org/articles/SeanCallan/2007/04/17/simple-form-authentication-in-1-2-xx
Код входа в систему.
<?php echo $this->Form->create('User', array('action' => 'login'));?> <?php echo $this->Form->input('username');?> <?php echo $this->Form->input('password');?> <?php echo $this->Form->submit('Login');?> <?php echo $this->Form->end(); ?>
2. Модальный файл
find (array ('username' => $ data ['username'], 'password' => md5 ($ data ['password'])), array ('id', 'username')); if (empty ($ user) == false) return $ user ['User']; return false; }}?>
Файл 3.controller
<?php App::uses('AppController', 'Controller'); class UsersController extends AppController { var $name = "Users"; var $helpers = array('Html', 'Form'); var $components = array("Auth"); function index() { } function beforeFilter() { $this->__validateLoginStatus(); } function login() { if(empty($this->data) == false) { if(($user = $this->User->validateLogin($this->data['User'])) == true) { $this->Session->write('User', $user); $this->Session->setFlash('You\'ve successfully logged in.'); $this->redirect('index'); exit(); } else { $this->Session->setFlash('Sorry, the information you\'ve entered is incorrect.'); exit(); } } } function logout() { $this->Session->destroy('user'); $this->Session->setFlash('You\'ve successfully logged out.'); $this->redirect('login'); } function __validateLoginStatus() { if($this->action != 'login' && $this->action != 'logout') { if($this->Session->check('User') == false) { $this->redirect('login'); $this->Session->setFlash('The URL you\'ve followed requires you login.'); } } } } ?>
Почему это произошло. Я новичок в этом. Некоторые разработчики в PHP чате предлагают мне не использовать этот Cake PHP. Любая помощь приветствуется
Недопустимый тип смещения означает, что вы пытались использовать объект или массив для индексации массива:
$x = stdClass; $a = array(1,2,3,4); $a[$x]; // illegal offset type
Проверьте свой код на возможные места, где вы взяли пользовательский ввод (который может быть массивом значений, даже если вы считали это всего лишь одним значением) и использовал его в некоторой функции, которая ожидала только значения.
Если эта внутренняя функция Cake ожидала значения и пыталась использовать ее как смещение массива, это сообщение появится.
Единственное место, которое я заметил в вашем коде, который передает параметр (а не буквальные строковые значения), находится здесь:
$this->User->validateLogin($this->data['User']))
Сделайте var_dump на $ this-> data ['User'] и посмотрите, что в нем, возможно, это массив, и вы должны были извлечь только $ this-> data ['User'] ['id'] Я не знаю , я не так много играл с Cake.