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.
I believe you should add the word Action to your method to make it valid:
public function agregarPedidoAction($id)
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.