したがって、routing.ymlには、特定の設定を編集および削除するために、次のルートが定義されています。
routing.yml:
settings.editDefaults:
path: settings/{id}/defaults/edit/{widgetType}
defaults: { _controller: AppBundle:Settings:editDefaults }
methods: [POST, PUT]
settings.deleteDefaults:
path: settings/{id}/defaults/delete/{widgetType}
defaults: { _controller: AppBundle:Settings:deleteDefaults }
methods: [DELETE]
そして私のコントローラーでは、正しいアクションが定義されています:SettingController.php:
/**
* edit the default settings of a hotel/widget
*/
public function editDefaultsAction(Request $request)
{
//Edit logic
}
/**
* delete a default setting of a hotel/widget
*/
public function deleteDefaultsAction($hotelId, $widgetType)
{
//Delete logic
}
2番目のアクションでは、id
とwidgetType
を渡すだけで、選択したレコードを照会して削除できます。
どちらかのルートに行くと、次のようになります。
ルートエラーの編集:
「GET/settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/edit/default」のルートが見つかりません:メソッドは許可されていません(許可:POST、PUT)
ルートエラーの削除:
「GET/settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/delete/default」のルートが見つかりません:メソッドは許可されていません(許可:DELETE)
しかし、一方を削除してもう一方を残すと、正常に機能します。似ているのはパス定義だと思いますか?同じパスを維持し、このエラーが発生しないようにすることは可能ですか?何がわからないの?
あなたの助けをありがとう、アンス
CRUDを使用してアクションを生成しましたか?
私はこの問題に対処するための解決策を見つけました。
/**
* Deletes a Preisliste entity.
*
*/
public function deleteAction(Request $request, $id)
{
/*$form = $this->createDeleteForm($id);
$form->handleRequest($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MandantBundle:Preisliste')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Preisliste entity.');
}
$em->remove($entity);
$em->flush();
}
return $this->redirect($this->generateUrl('preisliste'));*/
$em = $this->getDoctrine()->getManager();
$entity = $em->getRepository('MandantBundle:Preisliste')->find($id);
if (!$entity) {
throw $this->createNotFoundException('Unable to find Preisliste entity.');
}
$em->remove($entity);
$em->flush();
return $this->redirect($this->generateUrl('preisliste'));
}
コメントされたコードはCRUDからのものであり、機能しません。同じエラーが発生します(「GET ...」のルートが見つかりません)Symfonyがフォームを使用して削除しようとする理由がわかりません。エンティティを削除するだけが私にとって正しい方法です。
あなたの見解ではこれの代わりに:
<a href="{{ path('settings_delete', { 'id': settings.id }) }}">
Delete
</a>
フォームを使用する:
{{ form_start(delete_form) }}
<button type="submit">Delete</button>
{{ form_end(delete_form) }}
編集フォームも同じ
POST、PUT、およびDELETEメソッドのみを許可しますが、GETメソッドを介してこれらのルートにアクセスしています。
したがって、次のようにルートを定義します。
settings.editDefaults:
path: settings/{id}/defaults/edit/{widgetType}
defaults: { _controller: AppBundle:Settings:editDefaults }
settings.deleteDefaults:
path: settings/{id}/defaults/delete/{widgetType}
defaults: { _controller: AppBundle:Settings:deleteDefaults }
または、これらの制限が本当に必要な場合は、DELETE、PUT、およびPOSTメソッドをそのままにして、GETメソッドを追加します。
ブラウザでURLにアクセスする場合、通常はGETメソッドを介してリクエストを送信します。あなたはこれらについてもっと読むことができます: ここそしてここ