我目前正在学习如何使用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();
答案 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']])