Flow3 — скрытые поля шаблона ManyToMany Fluid (PropertyMapping)

У меня есть вопросительная модель и вопросительная модель, связанные отношением ManyToMany. Теперь я создаю перетаскиваемый пользовательский интерфейс (jQueryUI), в котором вопросы могут быть добавлены в вопросник.

С правой стороны каждый элемент вопроса представлен в виде (скрытого) текстового поля, содержащего его __identity:

<f:form.textfield property="questions" name="questions" value="{question}" />

С левой стороны у меня есть форма в качестве цели перетаскивания для вопросов. Когда эта форма отправлена, поток 3 ответил этим сообщением об ошибке:

1297759968: Исключение при сопоставлении свойства для целевого типа «MC\QuestionaryBuilder\Domain\Model\Questionary» по пути свойства «questions»: не разрешено сопоставлять свойство «__identity».

Вам нужно использовать $propertyMappingConfiguration->allowProperties('__identity') для включения сопоставления этого свойства.

Как я могу заставить его работать? :(

Изменить

Когда я использую это поле множественного выбора, я могу заставить его работать!

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


person Sascha Void    schedule 03.08.2014    source источник


Ответы (1)


Когда вы строите форму с помощью жидкости, все элементы между открывающим и закрывающим тегами form являются доверенными свойствами (тот же тип свойств, которым разрешено изменение). Fluid защищает ваши формы или, точнее говоря: объекты для манипуляций. Поскольку ваша зона сброса пуста (я думаю) в начале, эти поля не помечены как поля «разрешенные манипуляции». Это то, что хочет сказать ваше сообщение об ошибке.

Также похоже, что вы не добавляете вопрос к вопросам свойств, вместо этого вы пытаетесь установить вопросы к объекту-вопросу, поэтому ваша ошибка говорит о том, что вы пытаетесь манипулировать идентификацией вопросов. Вы должны попробовать <f:form.textfield name="questions[]" value="{question}" />

В сообщении об ошибке вы также найдете подсказку, которую вы, возможно, захотите узнать: вы можете самостоятельно пометить поля как «разрешенные манипуляции», используя конфигурацию сопоставления свойств.

Вы можете найти документацию здесь.

Пример. Это грубый пример использования конфигурации сопоставления свойств.

protected function initializeCreateAction() {
        $configuration = $this->arguments['newQuestionary']->getPropertyMappingConfiguration();
        //You can do: $configuration->allowAllProperties();
        //Or more specify:
        $configuration->allowProperties('questions');
}

public function createAction($newQuestionary){
        //...
        $this->myRepository->create($newQuestionary);
        //...
}

Может быть, вы можете дать нам больше информации, особенно пример кода, как выглядит ваш html (и, возможно, модель).

Также приятно знать:

  • Вы можете использовать <f:form.hidden .../> для скрытого поля.
  • Если вы используете <f:form.someTag property="myPro" />, атрибут имени и значения будет установлен (и переопределен).
person Andi    schedule 08.09.2014