Symfony 使用 post 请求更新数据
Symfony Update data with a post request
我目前正在尝试更新 table 中的一个人。 Table 看起来如下:
我希望能够在单击“提交”按钮时更新名字和姓氏以及姓名。
我的树枝文件如下所示:
{% block body %}
<h1>All our Patients</h1>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Firstname</th>
<th scope="col">Lastname</th>
<th scope="col">NIN</th>
<th scope="col">Update</th>
</tr>
</thead>
<tbody>
{% for person in persons %}
<tr>
<form action="{{ path('updatePerson', {"id": person.id}) }}" method="post">
<td>{{ person.id }}</td>
<td><input type="text" id="firstName" value="{{ person.firstName }}"></td>
<td><input type="text" id="lastName" value="{{ person.lastName }}"></td>
<td><input type="text" id="nin" value="{{ person.nin }}"></td>
<td><input class="btn btn-primary" type="submit" value="Submit"></td>
</form>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
我的控制器如下:
/**
* @Route("/user/persons/{id}", name="updatePerson")
*/
public function updatePerson(int $id): Response
{
$entityManager = $this->getDoctrine()->getManager();
$person = $entityManager->getRepository(Person::class)->find($id);
if (!$person) {
throw $this->createNotFoundException(
'No person found for id '.$id
);
}
$person->setFirstName('FirstName');
$person->setLastName('Lastname');
$person->setNin('00.09.69-420.2');
$entityManager->flush();
$persons = $this->getDoctrine()->getRepository(Person::class)->findAll();
return $this->render('user/person/index.html.twig', [
'persons' => $persons,
]);
}
目前,当我点击更新时,我只是填写“setFirstName('FirstName');”中的内容。我真的不知道如何传递正确的数据以便正确更新?我如何通过按提交来获得我想要进行的更改?
快速修复(不推荐):
您应该为文本输入标签添加 name
属性
<td><input type="text" id="firstName" name="firstName" value="{{ person.firstName }}"></td>
<td><input type="text" id="lastName" name="lastName" value="{{ person.lastName }}"></td>
<td><input type="text" id="nin" name="nin" value="{{ person.nin }}"></td>
并修改控制器:
/**
* @Route("/user/persons/{id}", name="updatePerson")
*/
public function updatePerson(Request $request, Person $person): Response
{
$entityManager = $this->getDoctrine()->getManager();
$person->setFirstName($request->request('firstName'));
$person->setLastName($request->request('lastName'));
$person->setNin($request->request('nin');
$entityManager->flush();
$persons = $this->getDoctrine()->getRepository(Person::class)->findAll();
return $this->render('user/person/index.html.twig', [
'persons' => $persons,
]);
}
但为了最佳实践,您应该使用 Symfony Form Collection and add validation rules for fields
我目前正在尝试更新 table 中的一个人。 Table 看起来如下:
我希望能够在单击“提交”按钮时更新名字和姓氏以及姓名。 我的树枝文件如下所示:
{% block body %}
<h1>All our Patients</h1>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Firstname</th>
<th scope="col">Lastname</th>
<th scope="col">NIN</th>
<th scope="col">Update</th>
</tr>
</thead>
<tbody>
{% for person in persons %}
<tr>
<form action="{{ path('updatePerson', {"id": person.id}) }}" method="post">
<td>{{ person.id }}</td>
<td><input type="text" id="firstName" value="{{ person.firstName }}"></td>
<td><input type="text" id="lastName" value="{{ person.lastName }}"></td>
<td><input type="text" id="nin" value="{{ person.nin }}"></td>
<td><input class="btn btn-primary" type="submit" value="Submit"></td>
</form>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}
我的控制器如下:
/**
* @Route("/user/persons/{id}", name="updatePerson")
*/
public function updatePerson(int $id): Response
{
$entityManager = $this->getDoctrine()->getManager();
$person = $entityManager->getRepository(Person::class)->find($id);
if (!$person) {
throw $this->createNotFoundException(
'No person found for id '.$id
);
}
$person->setFirstName('FirstName');
$person->setLastName('Lastname');
$person->setNin('00.09.69-420.2');
$entityManager->flush();
$persons = $this->getDoctrine()->getRepository(Person::class)->findAll();
return $this->render('user/person/index.html.twig', [
'persons' => $persons,
]);
}
目前,当我点击更新时,我只是填写“setFirstName('FirstName');”中的内容。我真的不知道如何传递正确的数据以便正确更新?我如何通过按提交来获得我想要进行的更改?
快速修复(不推荐):
您应该为文本输入标签添加 name
属性
<td><input type="text" id="firstName" name="firstName" value="{{ person.firstName }}"></td>
<td><input type="text" id="lastName" name="lastName" value="{{ person.lastName }}"></td>
<td><input type="text" id="nin" name="nin" value="{{ person.nin }}"></td>
并修改控制器:
/**
* @Route("/user/persons/{id}", name="updatePerson")
*/
public function updatePerson(Request $request, Person $person): Response
{
$entityManager = $this->getDoctrine()->getManager();
$person->setFirstName($request->request('firstName'));
$person->setLastName($request->request('lastName'));
$person->setNin($request->request('nin');
$entityManager->flush();
$persons = $this->getDoctrine()->getRepository(Person::class)->findAll();
return $this->render('user/person/index.html.twig', [
'persons' => $persons,
]);
}
但为了最佳实践,您应该使用 Symfony Form Collection and add validation rules for fields