更新数据库中的数据时出错

时间:2014-05-02 10:24:44

标签: symfony doctrine

我正在努力解决这个小问题。 我有一个允许将数据修改为数据库的表单,但是当我单击提交按钮时(即使它更改了值),它会显示错误: 缺少一些必需参数(“名称”)以生成路径“update_page”的URL。 500内部服务器错误 - MissingMandatoryParametersException

有人能帮助我吗?

这是我的控制者:

class updateElementController extends Controller
{       
public function updateAction($name)
{
    $request = $this->get('request');
    $ingrediente = $this->getDoctrine()
    ->getRepository('MyCrudBundle:Elements')
    ->findOneByName($name);


    $em = $this->getDoctrine()->getManager();

    $elementsmod = new Elements();

    $formupdate = $this->createFormBuilder($elementsmod)
        ->add('name', 'text')
        ->add('quantity', 'text')
        ->add('Change element', 'submit')
        ->getForm();

    $formupdate->handleRequest($request);

    if ($formupdate->isValid()) {
    $newval = $formupdate->getData();

    // change "entity" / object values we want to edit
    $namevalue= $newval->getName();
    $quantityvalue= $newval->getQuantity();
    $element->setName($namevalue);
    $element->setQuantity($quantityvalue);

    // call to flush that entity manager from which we create $item
    $em->flush();

    return new RedirectResponse($this->generateUrl('update_page'));
    }

    return $this->render('MyCrudBundle:Default:index.html.twig', array(
    'form' => $formupdate->createView(),
    )); 
}
}

我的路线:

update_page:
pattern:  /updatePage/{name}
defaults: { _controller: MyCrudBundle:updateElement:update }

(如果你需要代码的其他部分,请告诉我,我是初学者,而且肯定会写得非常糟糕)

1 个答案:

答案 0 :(得分:0)

我建议两个选择:

  1. 如果您的路由中不是必需的name,您可以按以下方式更改路由

    update_page: pattern: /updatePage/{name} defaults: { _controller: MyCrudBundle:updateElement:update, name: null }

  2. 如果生成的网址必须name,则需要将name作为模式参数传递

    if ($formupdate->isValid()) { $newval = $formupdate->getData(); $namevalue= $newval->getName(); $quantityvalue= $newval->getQuantity(); $element->setName($namevalue); $element->setQuantity($quantityvalue); $em->flush(); return new RedirectResponse($this->generateUrl('update_page', array('name' => $name))); }

  3. 根据您在控制器中的查询选择,$name是强制性的,我建议尝试第二个