Controller for URI "/ agregarPedido / 1" cannot be called

I am new to symfony and wanted to ask for help, I am from Argentina and so forgive me for my poor English. este es mi routing.yml:

Agregar_pedido:
    pattern: /agregarPedido/{id}
    defaults: { _controller: AtajoBundle:Tablas:agregarPedido }

      

And here is my TablasController.php:

public function agregarPedido($id)
    {
        $em = $this->getDoctrine()->getManager();
        $usuario = $em->getRepository('AtajoBundle:User')->find($id);
        $pedido = new Pedido();
        $pedido->setProducto('Yeso');
        $pedido->setCantidad('200');
        $pedido->setValor('50');
        $pedido->setUnidad('kg');
        $pedido->setFecha(new \Datetime());

        $pedido->setUser($usuario);

        //$em->persist("$usuario");
        $em->persist("$pedido");
        $em->flush();

        return new Response('El nuevo pedido agregado es el ' . $pedido->getId() . ' al cliente '. $id . '');
    }

      

an error occurs:

Controller URI "/ agregarPedido / 1" could not be called.

+3


source to share


2 answers


I believe you should add the word Action to your method to make it valid:



public function agregarPedidoAction($id)

      

+5


source


I'll answer in Spanish to get closer to Geronimo.

Spanish

Efectivamente necesitas añadir la palabra Action, también tendrías qu quitar las comillas del persist y cambiar pattern por path.

El resultado final sería:

Agregar_pedido:
    path: /agregarPedido/{id}
    defaults: { _controller: AtajoBundle:Tablas:agregarPedido }

public function agregarPedidoAction($id)
    {
        $em = $this->getDoctrine()->getManager();
        $usuario = $em->getRepository('AtajoBundle:User')->find($id);
        $pedido = new Pedido();
        $pedido->setProducto('Yeso');
        $pedido->setCantidad('200');
        $pedido->setValor('50');
        $pedido->setUnidad('kg');
        $pedido->setFecha(new \Datetime());

        $pedido->setUser($usuario);

        $em->persist($pedido);
        $em->flush();

        return new Response('El nuevo pedido agregado es el '.$pedido->getId().' al cliente '.$id);
    }

      

Ahora I debera funduinar pen me gustaría hacerte algunas recomendaciones y buenas prácticas que se pueden ver aquí http://librosweb.es/libro/buenas_practicas_symfony y aquí el libro oficial en español http://libros_web.es/libro_ficial/



En el código que muestras se pueden implementar dos buenas practicas:

  • Disposal of non-compliance with the control rules (tendrías que añadir este use al controlador use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

    )
  • Utiliza los ParamConverter para buscar las entidades Doctrine automaticatice siempre que la búsqueda sea sencilla.

El código quedaría así:

/**
 * @Route("/agregarPedido/{id}", name="Agregar_pedido")
 */
public function agregarPedidoAction(User $usuario)
    {
        $em = $this->getDoctrine()->getManager();
        $pedido = new Pedido();
        $pedido->setProducto('Yeso');
        $pedido->setCantidad('200');
        $pedido->setValor('50');
        $pedido->setUnidad('kg');
        $pedido->setFecha(new \Datetime());

        $pedido->setUser($usuario);

        $em->persist($pedido);
        $em->flush();

        return new Response('El nuevo pedido agregado es el '.$pedido->getId().' al cliente '.$usuario->getId());
    }

      

Espero servirte de ayuda.

+1


source







All Articles