2015-06-20 30 views
5

yüzden routing.yml ben belirli ayarlarını düzenlemek ve silmek için tanımlanan aşağıdaki yolları vardır:Symfony2'nin Yönlendirme: yöntem verilmiyor (izin ver: {Yöntem})

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] 
tanımlanmış

Ve benim denetleyicisi var doğru eylemleri: 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 
} 

İkinci eylemde, yalnızca id ve widgetType geçirilmesine ihtiyacım var, böylece seçili kaydı sorgulayıp kaldırabilirim.

Ben şu olsun yolundan biriyle giderken:

Düzenleme Rota Hatası:

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

Rota Hatası sil: zaman

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

Ama birini kaldır ve diğerlerini iyi çalışıyorlar. Benzer olan yol tanımları olduğunu mu varsayıyorum? Aynı yolları tutmam ve bu hatayı almam mümkün mü? Neyi anlamadım? Yardımlarınız, anth

cevap

2

Yalnızca POST yöntemleri PUT ve DELETE izin, ancak GET yöntemini kullanarak bu yolları erişen için

teşekkürler.

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 } 

Ya SİL bırakın, eğer gerçekten bu sınırlamalara ihtiyaç ve GET yöntemini eklerseniz, içinde PUT ve POST yöntemleri:

nedenle bu gibi yolları tanımlar.

Tarayıcınızla bir URL'ye erişirken, genellikle isteğinizi GET yöntemiyle gönderirsiniz. rezil Here And here

+0

Hey Jave, yanıt için teşekkürler.Artık yöntemleri kaldırdık, silerken, editAction'da bir hata bildiriyor, bu rota eyleminin neden çağrıldığının herhangi bir sebebi var mı? –

+0

@AnthBieb: 'method' bölümünü kaldırdınız ama bunu korumanızı öneriyorum; bu semantik olarak doğrudur. hata, rotalarda değil, url isteğiyle (DELETE, PUT veya POST yöntemi ile ayarlanmış olarak adlandırılmalıdır) – DonCallisto

+0

@AnthBieb, hatayı paylaşır mısınız? –

3

Sen oluşturmuş Eylemler: Bu hakkında daha okuyabilirim?

Sorun için bir çözüm buldum.

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

Yorum kodu çalışmıyor, çalışmıyor. Aynı hatayı al (“GET ...” için bir yol bulunamadı.) Artık symfony'nin neden silmek istediği bir form kullanmaya çalışmaz. sadece varlığı kaldırır benim için doğru yoldur. Bunun yerine görünümünde bunun

1

:

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

kullanım biçimidir: düzenlemek formu için

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

aynı

İlgili konular