wake-up-neo.net

Kann die Methode redirectToRoute () Argumente wie render () haben?

Ich muss auf eine Entität in twig von symfony2 ..__ zugreifen. Innerhalb des Controllers kann ich Folgendes tun:

return $this->render('frontendBundle::carrodecompras.html.twig', array(
        'entity' => $entity
));

Und dann kann ich in twig mit entity.name und so auf die Entitätseigenschaften zugreifen.

Ich muss dasselbe erreichen, aber mit der Funktion redirectToRoute()

return $this->redirectToRoute('frontend_carrodecompras', array(
        'entity' => $entity,
));

Aber es scheint nicht zu funktionieren. 

Ich erhalte folgende Fehlermeldung:

Die Variable "entity" ist in frontendBundle :: carrodecompras.html.twig in Zeile 32 nicht vorhanden

EDIT: Ich verwende Symfony 2.7

Die Variable $ entity existiert (in der App, die ich zur Vereinfachung der Verwendung von $ entity verwendet habe, heißt sie eigentlich $ cortina)

echo "<pre>";
var_dump($cortina);
echo "</pre>";

return $this->redirectToRoute('frontend_carrodecompras', array(
                'cortina' => $cortina,
                ));

Und das Ergebnis ist folgendes:

object(dexter\backendBundle\Entity\cortina)#373 (16) {
  ["id":"dexter\backendBundle\Entity\cortina":private]=>
  int(3)
  ...

Dies ist der Twig-Code:

<tr>
    {% set imagentela = "img/telas/" ~ cortina.codInterno ~ ".jpg" %}
    <td><img src="{{ asset(imagentela | lower ) }}" alt="" width="25" height="25">
    </td>
    <td>{{ cortina.nombre }}</td>
    <td>{{ "$" ~ cortina.precio|number_format('0',',','.') }}</td>
</tr>
7
enlego

Wenn Sie redirectToRoute($route, array $parameters) von einem Controller aus aufrufen, wird $parameters verwendet, um die URL-Token zu generieren, nicht die Variablen, die in View dargestellt werden sollen. Dies geschieht durch den Controller, der der Route zugewiesen ist, zu der Sie umleiten.

beispiel:

class FirstController extends Controller
{
    /**
     * @Route('/some_path')
     */
    public function someAction()
    {
        // ... some logic
        $entity = 'some_value';

        return $this->redirectToRoute('some_other_route', array('entity' => $entity)); // cast $entity to string
    }
}

class SecondController extends Controller
{
    /**
     * @Route('/some_other_path/{entity}', name="some_other_route")
     */
    public function otherAction($entity)
    {
        // some other logic
        // in this case $entity equals 'some_value'

        $real_entity = $this->get('some_service')->get($entity);

        return $this->render('view', array('twig_entity' => $real_entity));
    }
}
14
Heah

$this->redirectToRoute('something', array('id' => 1) ist ein praktischer Wrapper für $this->redirect($this->generateUrl('something', array('id' => 1))). Es erstellt eine URL mit Ihren Parametern und erwartet, dass der Wert der Parameter eine Zeichenfolge oder eine Zahl ist.

http://symfony.com/blog/new-in-symfony-2-6-new-shortcut-methods-for-controllers

Sie müssen entweder die ID der Entität übergeben, um die Daten in der neuen Aktion abzurufen, oder sie in einzelne Datenelemente zerlegen, bevor sie den Aufruf redirectToRoute () treffen.

class MyController extends Controller {
    public function myAction(){
        $cortina = new Cortina();
        $cortina->something = "Some text";

        $em = $this->getDoctrine()->getManager();
        $em->persist($cortina);
        $em->flush();

        return $this->redirectToRoute('frontend_carrodecompras', array(
            'id' => $cortina->getId()
        );
    }
}
1
SacWebDeveloper