无法使用create()提交表单;

时间:2015-05-11 18:07:55

标签: cakephp cakephp-3.0

所以我在我的内部有这个方法:

  

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');?但我不确定究竟是什么

1 个答案:

答案 0 :(得分:2)

按照惯例,控制器的默认可自动加载表基于控制器名称,而不是尾随Controller,因此对于JobsController,名为Jobs的表类({{1}可以自动加载。

如果无法加载表类(例如因为它不存在,或者因为名称与从控制器名称派生的名称不匹配),处理此类的魔术getter将返回{{1}一个布尔值,这是你试图调用方法的地方,因此是错误。

Table btw不再存在,你应该看一下ORM migration guide,以及一般的文档来掌握现在的工作方式。

因此请使用false并确保您拥有名为create()的表类,或覆盖要使用的默认模型( Controller::_setModelClass() ),或者手动加载所需的表格( TableRegistry::get() Controller::loadModel() )。

另见