Symfony my Controller :: updateAction () требует, чтобы вы указали значение для & quot; $ name & quot; аргумент

Используя 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;

Во-первых, у меня есть веточка, которая позволяет пользователям изменить / обновления Парк, я использую JavaScript, чтобы позволить select tag в HTML отображать форму в другом Маршрут / веточка когда выбор сделан, это код для выбрать парки пользователи хотели бы обновить:

{% 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();
});
});

А теперь веточка кому отобразить форму для обновления выбранный парк:

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

Поэтому, когда я отправляю на своем обновлении кнопку, у меня появляется ошибка:

Контроллер «MyBundle \ Controller \ ManageController :: updateAction ()» требует, чтобы вы указали значение для аргумента «$ name» (потому что нет никакого значения по умолчанию или потому что после этого есть необязательный аргумент).

Это мое контроллер код с обновить действие:

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

Решение

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, вам нужно будет добавить имя в URI POST.

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

И вам нужно будет сгенерировать URI с этим параметром.

2

Другие решения

Вы делаете правильные вещи, кроме вас $nom в качестве параметра в вашем контроллере, но name в вашей конфигурации маршрутизации. По другим файлам будет легко изменить только конфигурацию:

+ Изменить name в routing.yml в nom:

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

По вопросам рекламы [email protected]