Symfony mein Controller::updateAction() erfordert, dass Sie einen Wert für "$name" - argument

Mit symfony 2, ich habe diese Fehlermeldung, wenn ich versuche, pass ein 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).

diese die Einheit/Modell 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;

Zuerst habe ich eine Rute, die können es Benutzern ermöglichen, ändern/aktualisieren einem Park, ich bin mit Hilfe von javascript erlauben, die select tag in html zur Anzeige einer form in einer anderen route/Zweig, wenn eine Auswahl getroffen wird, dies ist der code für wählen Sie die parcs Benutzer aktualisieren möchten:

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

dies ist die javascript - code, die es mir erlauben, um die Benutzer umleiten nach einer Wahl auf die andere route, die Anzeige der update form:

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

Und jetzt der Zweig auf, der anzeigen des Formulars zu aktualisieren der eingegebenen 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 %}

So, wenn ich behaupte, dass auf meiner update-Button, ich habe den Fehler:

Controller "MyBundle\Controller\ManageController::updateAction()" erfordert, dass Sie einen Wert für "$name" - argument (weil es keinen default-Wert hat, oder weil ein nicht optionales argument hinter dieser).

Dies ist mein controller code mit der update-Aktion:

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

Dies ist die routing-Datei für meine Routen:

# 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

Meine Fragen sind diese:
warum habe ich diesen Fehler? Wie kann ich es beheben?
Und wie kann ich update richtig meine Einheit/Modell mit dieser updateAction(). Wie kann ich pass die Argumente durch eine route in Symfony.

Vielen Dank im Voraus.

Manchmal name verwendet wird, manchmal nom verwendet wird. Passt nicht...
sorry, mein Fehler, wenn ich einfügen mein code. Ich bin ein französischer Entwickler, übersetze ich meine Funktionen und Namen, um zu finden, ein Problem auf stackoverflow. Ich werde mein edit-code.
updateAction($name = null) kümmern sich um die Fehlermeldung. Allerdings, da es zwei verschiedene Routen cal die gleiche Aktion mit verschiedenen Parametern ist ein wenig zweifelhaft. Ich würde zwei Maßnahmen. Und sich bewusst sein, dass Sie können auch default-Werte direkt an den Strecken.
Ich versuche, Ihre Lösung und ich habe diesen Fehler: The identifier id is missing for a query of MySpace\DatabaseBundle\Entity\Parcs
Yep. Sie müssen verbringen einige Zeit, sich auf den Unterschied zwischen finden und findBy.

InformationsquelleAutor french_dev | 2014-12-08

Schreibe einen Kommentar