2015-06-20 12 views
5

तो routing.yml में मैं आदेश विशिष्ट सेटिंग्स को संपादित और नष्ट करने के लिए में परिभाषित निम्नलिखित मार्गों है:Symfony2 रूटिंग: पद्धति की अनुमति नहीं (अनुमति दें: {विधि})

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 पास करने की आवश्यकता है ताकि मैं चयनित रिकॉर्ड के लिए पूछताछ कर सकूं।

जब मैं मार्गों मैं निम्नलिखित मिल में से किसी के पास जाओ:

संपादित मार्ग त्रुटि:

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

आप केवल पोस्ट, डाल दिया और तरीकों 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 } 

या हटाना छोड़ रखा है और में पोस्ट विधियों, यदि आप वास्तव में उन प्रतिबंधों की जरूरत है और GET विधि जोड़ें:

तो इस तरह से अपनी मार्गों परिभाषित करते हैं।

जब आप अपने ब्राउज़र के साथ एक यूआरएल एक्सेस कर रहे हैं, तो आप आमतौर पर जीईटी विधि के माध्यम से अपना अनुरोध भेज रहे हैं। आप इनके बारे में अधिक पढ़ सकते हैं: Here And here

+0

अरे Jave, जवाब के लिए धन्यवाद।अब जब मैंने हटाए जाने के तरीकों को हटा दिया है, तो यह 'एडिट एक्शन' में एक त्रुटि की रिपोर्ट करता है, किसी भी कारण से कि रूट एक्शन भी कहा जाता है? –

+0

@ एंथबीब: आपने 'विधियों' भाग को हटा दिया है, लेकिन मैं आपको इसे रखने के लिए सुझाव देता हूं; यह अर्थात् सही है। त्रुटि मार्गों में नहीं है लेकिन यूआरएल अनुरोध में है (आपको इसे सेट, पुट या पोस्ट विधि के साथ कॉल करने की आवश्यकता है) – DonCallisto

+0

@AnthBieb, क्या आप त्रुटि साझा कर सकते हैं? –

3

आपने क्रूड के साथ क्रियाएं उत्पन्न की हैं?

मुझे समस्या का समाधान मिला है।

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

टिप्पणी कोड क्रूड से है, काम नहीं करता है। एक ही त्रुटि है ("GET ...) के लिए कोई रास्ता नहीं मिला है, अब मैं सिम्फनी को हटाने के लिए किसी फ़ॉर्म का उपयोग करने का प्रयास क्यों नहीं करता हूं। केवल इकाई को हटा देता है मेरे लिए सही तरीका है।

1
इसके बजाय अपने ध्यान में रखते हुए इस बात का

:

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

उपयोग एक रूप है:

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

संपादित फार्म के लिए एक ही

संबंधित मुद्दे