2017-10-04 7 views
0

comment puis-je rediriger vers une action différente en utilisant les fonctions de redirection ou de transfert? Ma solution ne semble pas fonctionnerTYPO3 extbase forward, action de redirection

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()); 
} 

Dans la vue, je suis en train de montrer la foundProduct dans la même page (non pas en créant une nouvelle show.html de fichier)

<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

Votre code semble rediriger vers 'listAction' chaque fois que vous voulez exécuter' showAction'. Est-ce que c'est ce que tu veux faire? –

+0

Je voudrais que les deux actions soient exécutées sur la même page (fichier .html). Typo3 me force à créer un fichier .html différent pour chaque action, dans mon cas list.html, et show.html. Au lieu de créer show.html je voudrais que showAction soit exécuté dans le fichier list.html. –

+0

Je ne peux pas comprendre l'idée. Le 'showAction' devrait montrer quelque chose, surtout le détail d'un enregistrement comme la vue de détail dans l'extension de nouvelles. La seule fois où j'utilise les redirections, c'est quand, par exemple, mettre à jour un enregistrement et revenir à la liste après avoir enregistré les modifications. Vous devriez penser à vos actions et à ce qu'il faut faire là-bas à mon humble avis. –

Répondre

0

cela ne fonctionnera pas de cette façon. Si vous utilisez redirect ou forward, l'affectation de variable est réinitialisée.

Vous pouvez affecter plusieurs propriétés dans le listAction:

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 
     ) 
    ); 
} 

Cela remplira le modèle que vous avez mentionné ci-dessus

+0

Est-ce que mais j'ai l'erreur suivante: Un argument "searchProduct" n'existe pas pour cette demande. Plus d'informations sur cette erreur peuvent être disponibles en ligne. Le plus probablement l'erreur fait référence à cette ligne: