[Flow] How to build One-To-Many Forms

mario chiari ml at mariochiari.net
Sun Nov 3 23:52:21 CET 2013


Hi

On Sun, 2013-11-03 at 20:02 +0100, Axel Wüstemann wrote:
> Hi there,
> 
> as in other posts I mentioned, my application is on fishery inspection. 
> Some kinds of inspections have one to many relations.
> 
> The "One" is the inspection itself. An example is, what I tried to 
> translate as "deposit inspection" (Anlandekontrolle). It has the 
> inspection, with properties as "date", "inspectionOfficer", the 
> "harbour" where the catch was broad to the land etc. The "manys" are the 
> catches ("deposits" in my translation) - the kind of fishes and its amount.
> 
> So I have a form with fields of the "depositInspection" followed by a 
> table, with each row representing a "deposit", consisting of a selectbox 
> for looking up the kind of fish and an input field for the related amount.
> 
> I built my domain models accordingly - a "depositInspection" model which 
> contains a "deposits" property of the type 
> \Doctrine\Common\Collections\Collection.:
> /**
>   * Anlandungen
>   *
>   * @var 
> \Doctrine\Common\Collections\Collection<\XXX\Intranet\FisheryInspection\Domain\Model\Deposit>
>   * @ORM\OneToMany(mappedBy="depositInspection")
>   */
> protected $deposits;
> 
> In the deposit model:
> 	
> /**
>   * zugehörige Anlandekontrolle
>   *
>   * @var XXX\Intranet\FisheryInspection\Domain\Model\DepositInspection
>   * @ORM\ManyToOne(inversedBy="deposits")
>   * @ORM\JoinColumn(name="ANLANDEKTR_ID", referencedColumnName="ID")
>   */
> protected $depositInspection;
> 
> The forms for new and edit I built according to that:
> http://lists.typo3.org/pipermail/flow/2013-June/003909.html
> 
> Initialy for a new depositInspection I have 5 rows of deposits, but I 
> need to have a field and action button to get more (or less) deposit 
> rows - in the new as well as in the edit form.
> 
> In order to biuld the new form, in the constructor of the 
> depositInspection I create an empty deposit and call five times 
> $this->addDeposit($emptyDeposit);

I do not think you need that.
How do you define your createAction?
For a form  to create a inspection (father) and its five (or any N)
deposits (sons), you may need to initialize the
deposit_inspection/createAction by something like:

           public function initializeCreateAction()
{ $this->arguments['newInspection']->getPropertyMappingConfiguration()->forProperty('deposits.*')->allowAllProperties()->setTypeConverterOption(
'TYPO3\Flow\Property\TypeConverter\PersistentObjectConverter',
\TYPO3\Flow\Property\TypeConverter
\PersistentObjectConverter::CONFIGURATION_CREATION_ALLOWED,TRUE); }

Then you should be able to create everything by just
$this->inspectionRepository->add($inspection);

Hope it helps.
Let us know.
mario


ps. pastebin your code somewhere.


> 
> Question 1:
> ==============
> Is that a good idea? How to add more rows? This should be some kind of 
> Ajax action. Should I do simply the same as in the constructor -  add 
> some more empty deposits to te deposits collection?
> 
> This works for the first step, so the rows apear in the new form and in 
> the edit form the deposit rows of a certain depositInspection are 
> correctly populated.
> 
> <f:for each="{newDepositInspection.deposits}" as="deposit" iteration="i">
> <div class="form-group">
>   <div class="..">Nr. {i.index}</div>
>   <div class=".."><f:form.select property="deposit.{i.index}.deposit" 
> options="{deposits}" ../></div>
>   <div class=".."><f:form.textfield property="deposit.{i.index}.amount" 
> .. /></div>
> </div>
> </f:for>
> 
> In the edit form I have additionally
> <f:form.hidden name="deposit.{i.index}.__identifier" value="{deposit.id}" />
> 
> When I submit the form I get
> 
>   Property "deposit" was not found in target object of type 
> "XXX\Intranet\FisheryInspection\Domain\Model\DepositInspection"
> 
> The related property in DepositInspectionis called "deposits" not 
> "deposit" -  but it is a collection of "deposit"
> 
> Question 2:
> ===========
> What goes wrong here? How to name the "toMany" properties in the form 
> correctly?
> 
> Thank you for your advise.
> 
> Axel
> 
> 
> 
> 
> _______________________________________________
> Flow mailing list
> Flow at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/flow




More information about the Flow mailing list