Элементы формы не отправляются - PullRequest
0 голосов
/ 09 ноября 2018

Итак, у меня странная проблема, с которой мне трудно разобраться. У меня есть простая форма с несколькими элементами, которые не отправляются, у всех этих элементов есть только одна общая черта, это элементы select:

            echo $this->Form->control("spirit_type_id", [
                "label" => false,
                "type" => "select",
                "options" => $spirit_types,
                "empty" => "Spirit Type"
            ]);

            echo $this->Form->control("country_id", [
                "label" => false,
                "type" => "select",
                "options" => $countries,
                "empty" => "Country"
            ]);

            echo $this->Form->control("region_id", [
                "label" => false,
                "type" => "select",
                "options" => $regions,
                "empty" => "Region"
            ]);

И в моем контроллере у меня есть:

public function add() {
    $spirit = $this->Spirits->newEntity();
    $spirit_types = $this->Spirits->SpiritTypes->find("list");
    $countries = $this->Spirits->Countries->find("list");
    $regions = $this->Spirits->Regions->find("list");

    if ($this->request->is("post")) {
        debug($this->request->getData());
        die();
        $spirit = $this->Spirits->patchEntity($spirit, $this->request->getData());
        $spirit->user_id = $this->Auth->user("id");

        if ($this->Spirits->save($spirit)) {
            $this->Flash->success("Your spirit was successfully saved.");

            $this->redirect(["action" => "index"]);
        } else {
            $this->Flash->error("Your spirit could not be saved.");
        }

    }

    $this->set(compact("spirit", "spirit_types", "countries", "regions"));
}

Важная часть - это оператор отладки. Это показывает, когда я вставляю данные, используя форму.

[
    'name' => 'Longrow Peated',
    'image' => 'imageLocation',
    'brand' => 'Springbank',
    'age' => '',
    'cost' => '55'
]

Это все текстовые и / или числовые элементы в моей форме, и все они выглядят просто отлично. Это становится немного страннее, хотя. У меня есть проверка в моей таблице, чтобы требовать эти поля id:

public function validationDefault(Validator $validator) {
    $validator->requirePresence(
        "name", "brand", "spirit_type_id", "country_id", "region_id", "age", "cost", "image"
    )
        ->notEmpty("name", "We require a name")
        ->notEmpty("brand", "We require a brand or distillery")
        ->notEmpty("spirit_type_id", "We require a type of alchohol")
        ->notEmpty("country_id", "We require a country of origin")

Но, кажется, это никогда не срабатывает, когда я вставляю данные с помощью patchEntity, это происходит только тогда, когда я действительно вызываю функцию сохранения и пытаюсь вставить в базу данных.

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Если $this->request->getData() не показывает все ваши поля, наиболее вероятной причиной будет какая-то проблема с вашей формой; у CakePHP не так много способов отбросить ваши данные отсюда. Вы можете сузить его с помощью инструментов браузера (встроенных в большинство из них сейчас) для проверки данных, фактически отправляемых из вашего браузера, в запросе страницы.

Если выясняется, что поля действительно вообще не передаются, проблема почти наверняка в вашей форме. Например, вы можете закрыть его раньше, или могут быть ошибки HTML, которые запутывают браузер. Убедитесь, что все ваши входные теги находятся между <form> и </form>, и, если они есть, попробуйте HTML-валидатор, чтобы проверить ваш код. В Интернете есть множество вариантов, и даже инспекторы, встроенные в браузеры, часто могут помочь вам обнаружить подобные проблемы.

0 голосов
/ 09 ноября 2018

Это самая распространенная проблема:

Если вы проверите debug($this->request->getData()); до $spirit = $this->Spirits->newEntity();, вы увидите все отправленные данные!

Далее перейдите к Духовной сущности и дважды проверьте, доступны ли ваши поля "spirit_type_id, .."!

/**
 * Fields that can be mass assigned using newEntity() or patchEntity().
 *
 * Note that when '*' is set to true, this allows all unspecified fields to
 * be mass assigned. For security purposes, it is advised to set '*' to false
 * (or remove it), and explicitly make individual fields accessible as needed.
 *
 * @var array
 */
protected $_accessible = [
    '*' => true, // quick fix
    'id' => false,
];

или лучше:

protected $_accessible = [
    'spirit_type_id' => true,
    'country_id' => true,
    // etc ...
];

Редактировать

отладка

$spirit = $this->Spirits->patchEntity($spirit, $this->request->getData());
debug($spirit); exit();

посмотреть, есть ли ошибки.

...