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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre zweite route nicht einen Namen angeben, der parameter wie die erste hat.
Die Ursache ist, dass die Methode erwartet das argument, sondern auf der Grundlage dieser Konfiguration werden keine zur Verfügung gestellt werden.
Es sei denn, Sie möchten, erstellen Sie eine weitere Aktion für die POST-Anforderung, müssen Sie die Namen auf die POST-URI.
Und Sie müssen, um zu generieren, die URI mit diesem parameter.
Ich habe nicht mehr den Fehler
Controller "MyBundle\Controller\ManageController::updateAction()" ... non optional argument after this one).
Jedoch das update nicht übereinstimmen. ja, ich möchte den Namen von einem Park, ich habe aktualisiert mein code wie in deinem Vorschlag, aber wenn ich die Eingabe von text ändern der E-mail in meinem Formular nicht aktualisiert, der name des ausgewählten parcs zuvor in meinem select-tagMehr, ich nur erkennen, dass in meiner url, wenn ich mein code auf meiner route-Datei, wie Sie mir empfehlen, es ist nicht der name von meinem ausgewählten Feld name wie
localhost/manageparcs/update/form/nameOfMyparc
habe ich die parameter parcs.Namen wielocalhost/manageparcs/update/form/parcs.name?
. Ich denke, ich habe etwas vergessen, wie die Tatsache, dass die auswählen müssen, wählen Sie das Feld name in meinem Modell/Einheit. (Sorry, ich bin ein wenig verwirren)InformationsquelleAutor Flosculus
Du tust, was Recht ist, außer Sie haben
$nom
als parameter in den controller, sondernname
in Ihrer routing-Konfiguration. Nach anderen Dateien, die es einfach zu ändern, nur Konfiguration:Ändern
name
imrouting.yml
zunom
:InformationsquelleAutor Michael Sivolobov