CakePhp错误:在非对象上调用成员函数create()

时间:2014-07-03 00:39:24

标签: php oop cakephp

我目前正在学习如何使用CakePhp。

我在自定义控制器中创建了一个函数,如下所示:

class FormatsController extends AppController
{
    // ....

    function admin_add()
    {

        // if the form data is not empty
        if (!empty($this->data)) {
            // initialise the format model
            $this->Format->create();
            // create the slug
            $this->data['Format']['slug'] = $this->slug($this->data['Format']['name']);
            // try saving the format
            if ($this->Format->save($this->data)) {
                // set a flash message
                $this->Session->setFlash('The Format has been saved', 'flash_good');
                // redirect
                $this->redirect(array('action' => 'index'));
            } else {
                // set a flash message
                $this->Session->setFlash('The Format could not be saved. Please, try again.', 'flash_bad');
            }
        }
    }

}

但是在我看来,我收到了这个错误:

  

错误:在非对象上调用成员函数create()

为什么会出现此错误,如何解决?

我很抱歉,我相信它引用的行是而不是在Controller中,但在我的视图中。它引用了我的观点,其中包含以下行:

<?php echo $form->create('Format');?>

在使用之前我还需要声明一些其他内容吗?即$this->Format->create();

7 个答案:

答案 0 :(得分:5)

你应该使用

  $this->Form->create('Format');

删除

 <?php echo $form->create('Format');?> 

并将其替换为

 <?php echo $this->Form->create('Format');?> 

$ form是导致错误的形式。

答案 1 :(得分:2)

需要定义模型的全局名称。因此,要在应用程序的任何地方访问它。

例如:我的模型是用户

class User extends AppModel {
    var $name = 'User';

    function myfunction ($id) {
                  .....
        }
}
To use in controller
Controller: 

class UsersController extends AppController
{
    function test()
    {
      $this->User->myfunction();
        ......
    }
}

我希望这会对你有所帮助!

答案 2 :(得分:1)

这可能是因为某些原因导致$ this-&gt;格式未被创建。如果你查看你的代码片段,你会看到它调用create()函数。在调用create()之前将其作为调试语句添加到控制器函数中,以查看它是否已设置。

debug( isset( $this->Format ) );

如果设置应该输出true。如果您尝试这个,请告诉我它说的内容我可能还有其他一些建议。

答案 3 :(得分:0)

您是否创建了“格式”模型? 当被调用模型出现问题时会出现这种错误。它未创建,或未正确创建或未正确导入/启动。

如果您在控制器中声明了$ uses变量,请确保在其他模型的$ uses数组中包含“Format”。

答案 4 :(得分:0)

在您的行动中尝试这一个

$this->loadModel('Format');

答案 5 :(得分:0)

$this->Format

未定义(因此它的值为null),null对象没有函数,因此无法使用

$this->Format->create();

它几乎等于

null->create();

答案 6 :(得分:0)

尝试

$this->Form->create(null,['url' => ['controller' => 'yourController', 'action' => 'yourAction']])