2017-10-04 2 views
0

Wie kann ich mit Redirect- oder Forward-Funktionen zu einer anderen Aktion umleiten? Meine Lösung scheint nichtTYPO3 extbase vorwärts, Redirect-Aktion

public function listAction() { 
    $products = $this->productRepository->findAll(); 
    $this->view->assign('products', $products); 
} 

public function showAction() { 
    $var = $this->request->getArgument('searchProduct'); 
    $foundProd = new \MyVendor\Inventory\Domain\Model\Product($var);  
    $prod = $this->productRepository->getProduct($foundProd); 
    \TYPO3\CMS\Core\Utility\DebugUtility::debug($prod); 

    $this->view->assign('test',$prod); 
    $this->redirect('list',NULL,NULL,array('')); 
    // $this->forward('list',NULL, NULL, $this->request->getArguments()); 
} 

Im Hinblick auf die Arbeit, ich versuche die foundProduct in der gleichen Seite zu zeigen (nicht durch eine neue Datei show.html Schaffung)

<f:widget.paginate objects="{products}" as="paginatedProducts" 
     configuration="{itemsPerPage: 10, insertAbove: 0, insertBelow: 1, maximumNumberOfLinks: 10}"> 
      <f:for each="{paginatedProducts}" as="productx"> 

        <tr>  
          <td align="top">{productx.uid}</td> 
          <td align="top">{productx.name}</td> 
          <td align="top"><f:format.crop maxCharacters="100">{productx.description}</f:format.crop></td> 
          <td align="top">{productx.quantity}</td> 
        </tr> 
      </f:for> 
       </f:widget.paginate> 
    </table> 

</div> 
<div class="col-sm-5"> 

<f:form method="post" controller="Inventory" action="show" name="searchProduct" object="{searchProduct}"> 
<label> Product Name <span class="required"></span><br /> 
    <f:form.textfield property="name" /></label><br /> 
<f:form.submit class="submit" value="Submit"/> 

<div> 
<f:for each ="{test}" as ="p"> 
    <P>Numele produsului : {p.name}</P> 
    <p>Descriere : {p.description}</p> 
    <p>Cantitate : {p.quantity} </p> 
</f:for> 
</div> 
</div> 

EDIT: list.html file. Basically when i click Submit i want to show on the same page the product found from the database.

This is how it works atm

+0

Ihr Code jedes Mal, die Sie ausführen 'showAction' wollen' listAction' zu umleiten scheint. Wollen Sie das tun? –

+0

Ich möchte, dass beide Aktionen auf der gleichen Seite (HTML-Datei) ausgeführt werden. Typo3 zwingt mich, für jede Aktion eine andere .html-Datei zu erstellen, in meinem Fall list.html und show.html. Anstatt show.html zu erstellen, möchte ich showAction in der list.html ausführen. –

+0

Ich kann die Idee nicht dahinter kommen. Die 'showAction' sollte etwas anzeigen, meistens das Detail eines Datensatzes wie die Detailansicht in der News-Erweiterung. Die einzige Zeit, die ich Redirects verwende, ist, wenn ich z. einen Datensatz aktualisieren und nach dem Speichern der Änderungen zur Liste zurückkehren. Du solltest deine Handlungen überdenken und was in dort imho tun. –

Antwort

0

wird es nicht so funktionieren. Wenn Sie redirect oder forward verwenden, wird die Variablenzuordnung zurückgesetzt.

Sie können mehrere Eigenschaften im listAction zuweisen:

public function listAction() { 
    $products = $this->productRepository->findAll(); 

// from your showAction 
    $var = $this->request->getArgument('searchProduct'); 
    $foundProd = new \MyVendor\Inventory\Domain\Model\Product($var);  
    $prod = $this->productRepository->getProduct($foundProd); 


    $this->view->assignMultiple(
     array(
      'products' => $products, 
      'test' => $prod 
     ) 
    ); 
} 

Dies wird die Vorlage füllen Sie oben genannten

+0

Habe dies aber ich bekomme folgende Fehlermeldung: Ein Argument "searchProduct" existiert nicht für diese Anfrage. Weitere Informationen zu diesem Fehler sind möglicherweise online verfügbar. Wahrscheinlich bezieht sich der Fehler auf diese Zeile:

Verwandte Themen