Невозможно отправить форму с помощью create ();

Итак, у меня есть этот метод внутри моего:

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');? но я не уверен, что именно


person Tachi    schedule 11.05.2015    source источник
comment
синтаксис для установки данных: $ this- ›set ('ключ', 'значение'); в вашем случае $ this- ›set ('job', 'Job');   -  person Aman Rawat    schedule 11.05.2015
comment
Та же ошибка, не помогло :(   -  person Tachi    schedule 11.05.2015


Ответы (1)


По соглашению по умолчанию автоматически загружаемая таблица для контроллера основана на имени контроллера без завершающего Controller, поэтому для JobsController класс таблицы с именем _3 _ (_ 4_) может быть загружен автоматически.

В случае, если класс таблицы не может быть загружен (например, потому что он не существует или потому что имя не совпадает с именем, полученным из имени контроллера), магический получатель, который обрабатывает это, вернет false, логическое значение, и это это то место, где вы пытаетесь вызвать метод, отсюда и ошибка.

create() btw больше не существует, вам следует взглянуть на Руководство по миграции ORM и документацию в целом, чтобы понять, как все работает сейчас.

Поэтому либо используйте $this->Jobs и убедитесь, что у вас есть класс таблицы с именем JobsTable, либо переопределите модель по умолчанию для использования (Controller :: _ setModelClass ()) или загрузите нужную таблицу вручную (TableRegistry :: get () или Controller :: loadModel ()).

Смотрите также

person ndm    schedule 11.05.2015
comment
У меня есть tableclass, и он соответствует таблице базы данных. - person Tachi; 11.05.2015
comment
да, я заменил $ this- ›Job на $ this-› Jobs, и теперь он говорит, что Unknown method create, и, как вы сказали, его больше не существует. Итак, теперь мне нужно придумать, как его заменить. - person Tachi; 11.05.2015
comment
@imran Как такое возможно? OP вызывал метод для логического значения, и сообщение об ошибке очень ясно об этом, также в журналах можно найти трассировку стека для ошибки, любой не новичок PHP-программист должен иметь возможность понять, что означает сообщение об ошибке, и как его отлаживать. Как только вы получите доступ к несуществующему методу в фактическом экземпляре класса таблицы, вы получите сообщение об ошибке, в котором говорится, что метод не существует, и ядро ​​CakePHP не о чем заботится, это PHP / OOP 101. - person ndm; 11.05.2015
comment
Пожалуйста, поправьте меня, если я ошибаюсь. Является ли безмодельная форма единственным способом обработки данных, полученных из формы в CakePHP 3.x? - person Tachi; 11.05.2015
comment
@Tachi Я не знаю, что вы имеете в виду под процессом, но ответ, скорее всего, отрицательный. - person ndm; 11.05.2015
comment
Что ж, у меня есть форма с полями ввода, которая показана в моем коде выше, и для ее обработки CakePHP3.x мне нужно создать специальный класс вне контроллера, который будет обрабатывать мою форму, а затем отправить его на мой основной контроллер, нет возможности напрямую обрабатывать данные, которые я получаю из формы внутри контроллера? Выбрасывать только внешний класс? ссылка - person Tachi; 11.05.2015
comment
Позвольте нам продолжить это обсуждение в чате. - person Tachi; 11.05.2015
comment
@Tachi Я действительно не понимаю, что вы там делаете, и почему вы думаете, что вы должны использовать промежуточные классы обработки данных, это действительно что-то для нового вопроса, где вы можете подробно объяснить свою проблему и предоставить примеры кода. - person ndm; 11.05.2015