Hallo Christian,

Deine CreateAction wird vermutlich nicht funktionieren.
Ein $this->forward() persistiert nach meinem Wissen kein Objekt. Deine Angaben werden also nicht in die Datenbank geschrieben. Deine Zuweisungen sind überflüssig. Du könntest $newHost, wenn ich mich nicht irre, direkt ins Repository adden.

Dieter


Am 18.10.2017 um 14:32 schrieb christian ewigfrost:
Erst einmal, nicht wundern dass diese Frage etwas naiv klingen mag. Dies ist das erste mal dass ich mit Typo3 arbeite, geschweige denn eine Extension entwerfe.

Zur Problemstellung:

Per Formular lasse ich einen user Objekte einer Klasse ("Appliance" genannt) erzeugen. Diese können mit ihren properties gelistet werden. Durch die "show" Action kann der user sich ein Objekt aus der Liste im Detail ansehen und die zugehörigen Objekte der Klasse "Host" (1-n Relation im Extension Builder gewählt). Das funktioniert wunderbar. Nun soll allerdings anhand dieser Relation der user in der Lage sein per Formular direkt unter der Host Liste, Hosts zu eben dieser "Appliance" hinzuzufügen. Ich kann Host Objekte ohne Relation erzeugen lassen, aber wie kann ich diese Relation zu eben diesem "Appliance" Objekt wählen? Ich weiß dass man mit der attach funktion der Klasse arbeiten muss, aber hierzu muss ich ja eben jenes "Appliance" Objekt an die Action "createhost" übergeben, damit ich die attach() Funktion der Klasse bzw. des Objektes "Appliance" nutzen kann. Wie mach ich das?
Mein code sieht so aus:

Ich "assigne" das Objekt $appliance an den view des Templates show:


public function showAction(\Cjk\Icingaconfgen\Domain\Model\Appliance $appliance)
   {
       $this->view->assign('appliance', $appliance);
   }



Das Template "show" um die Detailansicht einer Appliance mit Hosts zu generieren... :


<html xmlns:f="......" data-namespace-typo3-fluid="true">
<f:layout name="Default" />

<f:section name="main">
<h1>Single View for Appliance</h1>

<f:flashMessages />
<f:render partial="Appliance/Properties" arguments="{appliance:appliance}" />

<h2>Assigned Hosts</h2>
<table class="tx_icingaconfgen" >
    <tr>
        <th><f:translate key="tx_icingaconfgen_domain_model_appliance.kundeuid" /></th>         <th><f:translate key="tx_icingaconfgen_domain_model_appliance.ipv4extern" /></th>         <th><f:translate key="tx_icingaconfgen_domain_model_appliance.ipv4intern" /></th>         <th><f:translate key="tx_icingaconfgen_domain_model_appliance.sshport" /></th>
        <th>  </th>
        <th>  </th>
    </tr>

    <f:for each="{appliance.hosts}" as="host">
        <tr>
            <td><f:link.action action="show" arguments="{host : host}"> {host.hostid}</f:link.action></td>             <td><f:link.action action="show" arguments="{host : host}"> {host.kundennummer}</f:link.action></td>             <td><f:link.action action="show" arguments="{host : host}"> {host.hostname}</f:link.action></td>             <td><f:link.action action="show" arguments="{host : host}"> {host.ipv4}</f:link.action></td>             <td><f:link.action controller="Host" action="edit" arguments="{host : host}">Edit</f:link.action></td>             <td><f:link.action controller="Host" action="delete" arguments="{host : host}">Delete</f:link.action></td>
        </tr>
    </f:for>
</table>
</br>

<h2>Add   Host</h1>

<f:flashMessages />
<f:render partial="FormErrors" arguments="{object:Host}" />
<f:form action="createhost" arguments="{appliance:appliance}" name="newHost" object="{Appliance, newHost}">
<f:render partial="Host/FormFields" />
    <f:form.submit value="Add new Host" />
</f:form>

<f:link.action action="list">Back to list</f:link.action><br />

</f:section>
</html>



Die Action "createhost" im ApplianceController... Eben an diese Action will ich das zuvor an die view assignete Objekt $appliance wieder übergeben, damit ich mit der Funktion attach() eine Relation zw. $appliance und dem erzeugten Host Objekt bewirken kann:

  public function createhostAction(\Cjk\Icingaconfgen\Domain\Model\Host $newHost)
   {
    $objectManager = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');     $hostrep = $objectManager->get(\Cjk\Icingaconfgen\Domain\Repository\HostRepository::class);

       $hostx = $this->objectManager->get('Cjk\\Icingaconfgen\\Domain\\Model\\Host');
       $hostx->setHostid($newHost->getHostid());
    $hostx->setKundennummer($newHost->getKundennummer());
    $hostx->setHostname($newHost->getHostname());
    $hostx->setIpv4($newHost->getIpv4());
             $hostrep->add($hostx);

    $this->forward('show');
         }

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

--
----
Dr. Dieter Porth - Web-Entwickler

_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german

Antwort per Email an