URI" / agregarPedido / 1"的控制器不可赎回

时间:2015-06-01 21:24:31

标签: php symfony

我是symfony的新手,想要寻求帮助,我来自阿根廷,所以原谅我的英语不好。 este es mi routing.yml:

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

这是我的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 . '');
    }

出现的错误如下:

URI" / agregarPedido / 1"的控制器不可赎回。

2 个答案:

答案 0 :(得分:5)

我相信你应该将Action一词附加到你的方法上,使其成为一个有效的行动:

public function agregarPedidoAction($id)

答案 1 :(得分:1)

我会用西班牙语回复以接近Geronimo。

西班牙语

Efectivamentenecesitasañadirlapalabra Action,tambiéntendríasquequitar las comillas del persist y cambiar pattern por path。

El resultadofinalserí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);
    }

Ahorayadeberíafuncionarperomegustaríahacertealgunas recomendaciones ybuenasprácticasquese puedenveraquíhttp://librosweb.es/libro/buenas_practicas_symfony yaquíellibro oficialenespañolhttp://librosweb.es/libro/symfony_2_4/

Enelcódigobuemuestras se pueden implementar dos buenas practicas:

  • Utilizarnotaciónderouting en controladores(tendríasqueaadadeste use al controlador use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
  • Utiliza los ParamConverter para buscar las entidadesDoctrineautomáticamentesiemprequelabúsquedafailsencilla。

Elcódigoquedaríaasí:

/**
 * @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。