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é, parfoisnom
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.
Vous devez vous connecter pour publier un commentaire.
Votre deuxième voie ne spécifie pas de nom de paramètre comme la première on ne.
La cause est que la méthode s'attend à l'argument, mais en se fondant sur cette configuration ne seront pas fournis.
Sauf si vous voulez créer une autre action pour la requête POST, vous devez ajouter le nom du POSTE de URI.
Et vous aurez besoin de générer une URI avec ce paramètre.
Controller "MyBundle\Controller\ManageController::updateAction()" ... non optional argument after this one).
Toutefois, la mise à jour ne correspond pas. en effet, je voudrais changer le nom d'un parc, j'ai mis à jour mon code comme dans votre suggestion, mais si j'ai d'entrée de texte pour changer de mail dans mon formulaire, Il ne met pas à jour le nom de la parcs avant dans ma balise selectlocalhost/manageparcs/update/form/nameOfMyparc
, j'ai le paramètre parcs.nom comme çalocalhost/manageparcs/update/form/parcs.name?
. Je pense, j'ai oublié quelque chose, comme le fait que l'sélectionnez le bouton pour sélectionner le champ nom dans mon modèle/de l'entité. (Désolé je suis un peu embrouiller)Vous êtes en train de faire des choses, sauf que vous avez
$nom
comme paramètre dans votre contrôleur, maisname
dans votre configuration de routage. Selon d'autres fichiers, il sera facile de changer de configuration uniquement:Changement
name
dansrouting.yml
ànom
: