所以我在我的内部有这个方法:
JobsController.ctp:
<?php
namespace App\Controller;
use App\Controller\AppController;
use Cake\ORM\TableRegistry;
/**
* Jobs Controller
*
* @property \App\Model\Table\JobsTable $Jobs
*/
class JobsController extends AppController
{
public $name = 'Jobs';
public function add()
{
//Some Vars assigning skipped, var job is empty
$this->set('job','Job');
$this->Job->create();
}
}
我对表单本身有这样的看法:
add.ctp:
<?= $this->Form->create($job); ?>
<fieldset>
<legend><?= __('Add Job Listing'); ?></legend>
<?php
echo $this->Form->input('title');
echo $this->Form->input('company_name');
echo $this->Form->input('category_id',array(
'type' => 'select',
'options' => $categories,
'empty' => 'Select Category'
));
echo $this->Form->input('type_id',array(
'type' => 'select',
'options' => $types,
'empty' => 'Select Type'
));
echo $this->Form->input('description', array('type' => 'textarea'));
echo $this->Form->input('city');
echo $this->Form->input('contact_email');
?>
</fieldset>
<?php
echo $this->Form->button('Add');
$this->Form->end();
?>
此表类:
JobsTable.php
<?php
namespace App\Model\Table;
use Cake\ORM\Table;
class JobsTable extends Table
{
public function initialize(array $config)
{
$this->belongsTo('Types', [
'foreignKey' => 'type_id',
'joinType' => 'INNER',
]);
$this->belongsTo('Categories', [
'foreignKey' => 'category_id',
'joinType' => 'INNER',
]);
}
}
当我提交它时,它会给我下一个错误:
错误:在布尔值
上调用成员函数create()
不知道如何解决。 我还有实体
Job.php:
<?php
namespace App\Model\Entity;
use Cake\ORM\Entity;
/**
* Job Entity.
*/
class Job extends Entity
{
/**
* Fields that can be mass assigned using newEntity() or patchEntity().
*
* @var array
*/
protected $_accessible = array(
'category_id' => true,
'user_id' => true,
'type_id' => true,
'company_name' => true,
'title' => true,
'description' => true,
'city' => true,
'contact_email' => true,
'category' => true,
'user' => true,
'type' => true,
);
}
那么如何修复表单提交时出现的错误?
错误:在布尔值
上调用成员函数create()
我想我需要做一些事情with $this->set('job');
?但我不确定究竟是什么
答案 0 :(得分:2)
按照惯例,控制器的默认可自动加载表基于控制器名称,而不是尾随Controller
,因此对于JobsController
,名为Jobs
的表类({{1}可以自动加载。
如果无法加载表类(例如因为它不存在,或者因为名称与从控制器名称派生的名称不匹配),处理此类的魔术getter将返回{{1}一个布尔值,这是你试图调用方法的地方,因此是错误。
Table
btw不再存在,你应该看一下ORM migration guide,以及一般的文档来掌握现在的工作方式。
因此请使用false
并确保您拥有名为create()
的表类,或覆盖要使用的默认模型( Controller::_setModelClass() ),或者手动加载所需的表格( TableRegistry::get() 或 Controller::loadModel() )。
另见