Symfony我的Controller :: updateAction()要求您为“$ name”参数提供一个值

时间:2014-12-08 12:33:58

标签: php symfony doctrine-orm routes updates

使用symfony 2时,当我尝试传递参数/变量时出现此错误:

Controller "MyBundle\Controller\ManageController::updateAction()" 
requires that you provide a value for the "$name" argument (because there is 
no default value or because there is a non optional argument after this one).

实体/模型 Parcs

namespace MyBundle\DatabaseBundle\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Parcsimmobilier
 *
 * @ORM\Table(name="parcs")
 * @ORM\Entity
 */
class Parcs
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=150, nullable=false)
     */
    private $name;

首先,我有一个小树枝,可以让用户修改/更新一个Parc,我使用javascript来允许html中的select tag 在选择时在另一个路线/树枝中显示表单,这是选择用户想要更新的parcs 的代码:

{% block content %}
<div class="form-group">
  <label class="control-label">Wich Parcs would you like to update ?</label>
  <form action="{{ path('UpdateParcs_form' , {'name':'parcs.name'}) }}" method="GET">
    <select class="form-control" id="selectpicker">
      <option disabled selected> select your parc </option>
      {% for parcsimmobilier in parc %}
        <option value="parc"><strong>{{ parcs.name}}</strong></option>
      {% endfor %}
    </select>
  </form>
</div>
{% endblock %}

这是 javascript 代码,允许我在显示更新表单的其他路线上选择后重定向用户:

$(function() {
    $('#selectpicker').change(function() {
        this.form.submit();
    });
});

现在是显示表单以更新所选择的parc的小枝:

{% block content %}
    <form action="{{ path('updateParcs_process') }}" method="POST">
      <div>
      {{ form_label(form.name, "change the name of the parc", {'label_attr': {'class': 'control-label'}}) }}
        <div>
          {{ form_widget(form.name, {'attr': {'class': 'form-control'}}) }}
        </div>
      </div>

      <input type="submit" value="Update" class="btn btn-success"/>
    </form>
{% endblock %}

所以当我提交更新按钮时,我有错误:

  

Controller&#34; MyBundle \ Controller \ ManageController :: updateAction()&#34;要求您为&#34; $ name&#34;提供价值。参数(因为没有默认值或因为在此之后存在非可选参数)。

这是我的控制器代码,其中包含更新操作

public function updateAction($name) {

    $em = $this->getDoctrine()->getManager();
    $parc = $em->getRepository('MySpaceDatabaseBundle:Parcs')->find($name);
    $form = $this->createForm(new ParcsType(), $parc);

    $request = $this->get('request');

    if ($request->isMethod('POST') | ($form->isValid())) {

            $form->bind($request);
            $parc = $form->getData();
            $em->flush();

            return $this->redirect($this->generateUrl('index_parcs'));
        }

    //retourner le formulaire d'ajout si c'est invalide
    else {
            return $this->render('MySpaceManageBundle:Parcs:updateParcs.html.twig', array('form' => $form->createView(), 'parc' => $parc, 'name' => $name));
         }
}

这是我的路线的路由文件:

# index for management
index_Parcs:
    path:     /manageparcs
    defaults: { _controller: MySpaceManageBundle:Manage:indexParcs }
    requirements:
    methods: GET

# route for display the form after the select choice
updateParcs_form:
    path:     /manageparcs/update/form/{name}
    defaults: { _controller: MySpaceManageBundle:Manage:update }
    requirements:
    methods: GET

# route for processing form with update
updateParcs_process:
    path:     /manageparcs/update/form/success
    defaults: { _controller: MySpaceManageBundle:Manage:update }
    requirements:
    methods: POST

我的问题是这些: 为什么我有这个错误?我该如何解决? 如何使用此 updateAction() 正确更新我的实体/模型。我如何在Symfony中通过路径传递 参数

提前致谢。

2 个答案:

答案 0 :(得分:2)

updateParcs_form:
    path:     /manageparcs/update/form/{name}
    defaults: { _controller: MySpaceManageBundle:Manage:update }
    requirements:
    methods: GET

# route for processing form with update
updateParcs_process:
    path:     /manageparcs/update/form/success
    defaults: { _controller: MySpaceManageBundle:Manage:update }
    requirements:
    methods: POST

您的第二条路线没有像第一条路线那样指定名称参数 原因是该方法期望参数,但基于此配置,将不提供任何参数。

除非您想为POST请求创建另一个操作,否则您需要将该名称添加到POST URI。

path:     /manageparcs/update/form/{name}/success

您需要使用此参数生成URI。

答案 1 :(得分:1)

除了控制器中有$nom参数,但路由配置中有name之外,您做得很对。根据其他文件,只更改配置很容易:

name中的routing.yml更改为nom

updateParcs_form:
path:     /manageparcs/update/form/{nom}
defaults: { _controller: MySpaceManageBundle:Manage:update }
requirements:
methods: GET