2015-06-20 2 views
5

так в routing.yml У меня есть следующие маршруты, определенные для редактирования и удаления специфических настроек:Symfony2 маршрутизации: Method Not Allowed (Allow: {Метод})

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 
} 

Во втором действии мне нужны только id и widgetType, поэтому я могу запросить и удалить выбранную запись.

Когда я иду к одному из маршрутов, которые я получаю следующее:

Edit Route Error:

No route found for "GET /settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/edit/default": Method Not Allowed (Allow: POST, PUT)

Ошибка при удалении маршрута:

No route found for "GET /settings/2b2acd55-0dd6-11e5-8107-621ae3320fd4/defaults/delete/default": Method Not Allowed (Allow: DELETE)

Но когда я удалите один и оставьте другое, чтобы они работали нормально. Я предполагаю, что это определения пути, которые похожи? Возможно ли, чтобы я сохранил одни и те же пути и не получил эту ошибку? Что я не понимаю?

Спасибо за вашу помощь, ANTH

ответ

2

разрешить только 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. Вы можете почитать больше об этом: Here And here

+0

Эй Jave, спасибо за ответ.Теперь, когда я удалил методы, при удалении он сообщает об ошибке в 'editAction', по какой-либо причине, почему это действие маршрута также вызвано? –

+0

@AnthBieb: вы удалили часть 'methods', но я предлагаю вам ее сохранить; это семантически корректно. ошибка не в маршрутах, а в запросе url (вам нужно вызвать его с помощью метода DELETE, PUT или POST) – DonCallisto

+0

@AnthBieb, не могли бы вы поделиться об ошибке? –

3

Вы создали Действия с 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 пытается использовать форму для удаления. только удаляет сущность - это правильный путь для меня.

1

Вместо этого на ваш взгляд:

<a href="{{ path('settings_delete', { 'id': settings.id }) }}"> 
    Delete 
</a> 

использование форма:

{{ form_start(delete_form) }} 
    <button type="submit">Delete</button> 
{{ form_end(delete_form) }} 

же для редактирования формы

Смежные вопросы