2016-10-27 9 views
1

В моей Extbase 6.2 расширения (построен с расширением строитель) Я:Свойства, которые не были перечислены в псевдоожиженном виде перезаписаны после отправить

  • An appointment, который имеет
    • lawyer, который имеет
      • специализации (в данном примере - expertises).

В моей форме я просто хочу, чтобы редактировать expertises, но каждый раз, когда я ударил представить мои lawyer свойства «s опорожняются за expertises исключением - те работы, даже их значения являются правильными.
Когда я отлаживаю объект в жидкости, адвокат там и все правильно.
Это единственное место в моей жидкой форме, где я написал слово «адвокат».

<f:for each="{appointment.lawyer.expertises}" as="expertise" iteration="i"> 
    <f:form.checkbox property="lawyer.expertises.{i.index}.checked" value="1"/> 
    <f:for each="{expertise.subExpertises}" as="subExpertise" iteration="j"> 
     <f:form.checkbox property="lawyer.expertises.{i.index}.subExpertises.{j.index}.checked" value="1"/> 
    </f:for> 
</f:for> 

Обычно мои свойства appointment не перезаписываются только потому, что я не пишу формы ввода-поле для них.
Итак, почему свойства appointment.lawyer перезаписаны и как я могу предотвратить это?

К сожалению, я понятия не имею, что TYPO3 делает для того, чтобы построить объект из моей формы так что любые намеки на то, что было бы оценено тоже :)

ответ

4

Это не так легко редактировать свойства связанных элементов ,

Что TYPO3 делает в вашем случае является то, что оригинал связанной lawyer запись (а также оригинал expertises) отделяется от appointment объекта и новый создаются вместо этого, вот почему вы думаете, что другие свойства опустели. Вы также увидите, что если вы посмотрите на свои элементы в представлении списка, будет каждый раз больше, чем вы его сохраните. Причина в том, что форма не генерируется автоматически с помощью lawyer и expertises, поэтому TYPO3 считает, что это новые объекты.

Существует одно решения я знаю (если кто-то знает лучше один, пожалуйста, поделитесь) Но вы должны прочитать все описание: Вы должны вручную добавить UID поля в форме для каждого связанного объекта. Если предположить, что ваша форма имеет name="appointment"

<f:form.hidden name="appointment[lawyer][__identity]" value="{appointment.lawyer.uid}" /> 

<f:form.hidden name="appointment[lawyer][expertises][{i.index}][__identity]" value="{expertise.uid}"/> 

Вы также должны сделать это для подсвойств.

Важно! Таким образом, пользователь может также манипулировать идентификаторами и изменять объекты, к которым у него не должно быть доступа, поэтому вам нужно проверить отношения перед сохранением. Для этого вы можете использовать метод _getCleanProperty('xx') объекта домена для получения исходных данных.

if ($appointment->getLawyer()->getUid() != $appointment->_getCleanProperty('lawyer')->getUid()) { 
    die('error'); 
} 

Вам необходимо проверить все отношения, которыми можно управлять, конечно.

+0

Удивительно, это работает, но как я могу проверить вложенные свойства? 'foreach ($ destination-> getLawyer() -> getExpertises() как $ expert) { if ($ expert-> getUid()! = $ Destination -> _ getCleanProperty ('lawyer.expertises') -> getUid()) { die ('error'); } 'дает мне ошибку:' Вызов функции-члена getUid() для не-объекта' –

+0

Возможно, у вас есть родительское поле в модели 'экспертизы'. Затем вы можете проверить, изменился ли родитель: 'if ($ expert -> _ getCleanProperty ('parentField') -> getUid()! = $ Lawyer-> getUid()) {die ('error'); } ' PS: вы всегда должны сравнивать идентификаторы, а не весь объект, потому что тогда все свойства и вложенные объекты рекурсивно сравниваются, и это чертовски медленно. –

+0

нет, к сожалению, у меня нет родительского свойства в моей модели, потому что это было бы перетаскиванием, чтобы установить родительский объект в дочернем объекте И потомке в родительском объекте каждый раз, когда я добавляю запись вручную в бэкэнд (я на самом деле Не пробовал - может ли он установить другое свойство автоматически для меня? Я сомневаюсь, что я построил его с помощью расширителя. Чтобы сохранить древовидную структуру, у меня есть только дочерние свойства в моих родительских моделях. Если вы знаете хороший способ справиться с этим, я был бы рад услышать это. –