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.
source to share
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.
source to share