Symfony mon Controller::: updateAction() nécessite que vous devez fournir une valeur pour le “$nom” argument

À l'aide de symfony 2, j'ai cette erreur quand j'essaie de passer un argument/variable:

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).

ce la entité/modèle 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;

D'abord, j'ai une brindille, qui peut permettre aux utilisateurs de modifier/mettre à jour un Parc, je suis en utilisant javascript pour permettre à la select tag en html pour afficher un formulaire dans un autre route/twig lorsqu'un choix est fait, c'est le code pour choisir les parcs les utilisateurs à mettre à jour:

{% 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 %}

c'est le javascript code qui me permettent de rediriger les utilisateurs après un choix sur l'autre route qui de l'affichage de la formulaire de mise à jour:

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

Et maintenant le rameau à qui afficher le formulaire de mise à jour le choisi 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 %}

Alors, quand je soumettre mon Bouton de mise à jour, j'ai l'erreur:

Contrôleur "MyBundle\Controller\ManageController::: updateAction()" nécessite que vous devez fournir une valeur pour le "$nom" argument (car il n'y a pas de valeur par défaut ou parce qu'il est un non argument optionnel après celui-ci).

C'est mon contrôleur code avec le action de mise à jour:

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));
         }
}

C'est le fichier de routage pour mon parcours:

# 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

Mes questions sont celles-ci:
pourquoi j'ai cette erreur? Comment puis-je résoudre ce problème?
Et comment puis-je mise à jour correctement mon entité/modèle cette : updateAction(). Comment puis-je passer la arguments par un route dans Symfony.

Merci d'avance.

  • Parfois name est utilisé, parfois nom est utilisé. Ne correspond pas...
  • désolé, mon erreur quand je colle mon code. Je suis un développeur français, je traduis mes fonctions et noms dans le but de trouver une question sur stackoverflow. Je vais modifier mon code.
  • : updateAction($name = null) prendra en charge le message d'erreur. Cependant, ayant deux itinéraires différents cal la même action avec différents paramètres est un peu douteux. Je voudrais utiliser deux actions. Et sachez que vous pouvez également ajouter des valeurs par défaut directement sur les routes.
  • J'ai essayer ta solution et j'ai cette erreur: The identifier id is missing for a query of MySpace\DatabaseBundle\Entity\Parcs
  • Yep. Vous avez besoin de passer un peu de temps à regarder la différence entre trouver et findBy.
  • même si j'utilise FindBy, et donc d'un tableau, la mise à jour ne correspond pas.

InformationsquelleAutor french_dev | 2014-12-08