2015-06-20 14 views
5

như vậy trong routing.yml tôi có các tuyến đường sau đây được xác định theo thứ tự để chỉnh sửa và xóa cài đặt cụ thể:Symfony2 Routing: Phương pháp không được phép (Allow: {Method})

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] 

Và trong bộ điều khiển của tôi, tôi có những hành động đúng định nghĩa: 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 
} 

Trong hành động thứ hai, tôi chỉ cần idwidgetType để tôi có thể truy vấn và xóa bản ghi đã chọn.

Khi tôi đi đến một trong các tuyến đường tôi nhận được như sau:

Sửa Route Lỗi:

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

Xóa Route Lỗi:

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

Nhưng khi tôi loại bỏ một và để cho người kia họ làm việc tốt. Tôi giả định đó là định nghĩa đường dẫn tương tự? Có thể cho tôi để giữ cho các đường dẫn tương tự và không nhận được lỗi này? Tôi không hiểu gì?

Nhờ sự giúp đỡ của bạn, ANTH

Trả lời

2

Bạn chỉ cho phép POST, PUT và DELETE phương pháp, nhưng bạn đang truy cập vào những tuyến đường thông qua phương thức GET.

để xác định tuyến đường của bạn như thế này:

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 } 

Hoặc rời khỏi DELETE, PUT và phương pháp POST trong, nếu bạn thực sự cần những hạn chế và thêm phương thức GET.

Khi bạn đang truy cập URL bằng trình duyệt của mình, bạn thường gửi yêu cầu qua phương thức GET. Bạn có thể đọc thêm về những điều sau: Here And here

+0

Hey Jave, cảm ơn cho câu trả lời.Bây giờ tôi đã gỡ bỏ các phương thức, khi xóa, nó báo cáo một lỗi trong 'editAction', bất kỳ lý do gì mà hành động route đó cũng được gọi? –

+0

@AnthBieb: bạn đã xóa phần 'phương thức' nhưng tôi khuyên bạn nên giữ nó; đây là ngữ nghĩa chính xác. lỗi không phải là trong các tuyến đường nhưng vào yêu cầu url (bạn cần phải gọi nó với DELETE, PUT hoặc POST phương pháp giải quyết) – DonCallisto

+0

@ AnthBieb, bạn có thể vui lòng chia sẻ lỗi? –

3

Bạn đã tạo Hành động với tiếng kêu?

Tôi đã tìm thấy giải pháp cho sự cố.

/** 
* 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')); 
} 

Mã nhận xét từ crud, không hoạt động. Có lỗi tương tự (Không tìm thấy tuyến đường nào cho “GET ...) Tôi không biết tại sao symfony cố gắng sử dụng biểu mẫu để xóa. chỉ loại bỏ thực thể là cách chính xác cho tôi.

1

Thay vì điều này theo quan điểm của bạn:

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

sử dụng một hình thức:

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

cùng để chỉnh sửa hình thức

Các vấn đề liên quan