2

我使用 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

Login.ctp的代码

登录

<?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']; 返回假;} } ?>

3.控制器文件

<?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。任何帮助表示赞赏

4

1 回答 1

1

非法偏移类型意味着您试图使用对象或数组来索引数组:

$x = stdClass;
$a = array(1,2,3,4);
$a[$x]; // illegal offset type

检查您的代码,寻找您接受用户输入的可能位置(即使您认为它只是一个值,也可能是一组值)并将其用于某些只需要一个值的函数中。

如果 Cake 内部函数需要一个值并试图将其用作数组的偏移量,则会出现此消息。

观测值

我在您的代码中唯一注意到传递参数(而不是文字字符串值)的地方是:

$this->User->validateLogin($this->data['User']))

在 $this->data['User'] 上做一个var_dump看看里面有什么,也许它是一个数组,你应该只提取 $this->data['User']['id'] 我不知道,我没怎么玩过Cake。

于 2012-05-30T13:05:13.843 回答