2015-06-20 9 views
5

così in routing.yml Ho le seguenti percorsi definiti al fine di modificare e cancellare le impostazioni specifiche:Symfony2 Routing: Metodo non consentito (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] 

E nel mio controller ho le azioni corrette definite: 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 
} 

Nella seconda azione sono necessari solo il id e il widgetType inoltrato in modo da poter richiedere e rimuovere il record selezionato.

Quando vado a uno dei percorsi ottengo il seguente:

Modifica percorso di errore:

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

Elimina Errore Percorso:

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

Ma quando ho rimuoverne uno e lasciare l'altro funzionano bene. Suppongo che siano le definizioni di percorso che sono simili? È possibile per me mantenere gli stessi percorsi e non ottenere questo errore? Cosa non sto comprendendo?

Grazie per il vostro aiuto, Anth

risposta

2

È solo permetterà POST, PUT e DELETE metodi, ma si accede a tali rotte tramite metodo GET.

quindi definire i percorsi in questo modo:

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 } 

o lasciare il DELETE, put e metodi POST in, se si ha realmente bisogno queste restrizioni e aggiungere metodo GET.

Quando si accede a un URL con il browser, di solito si invia una richiesta tramite il metodo GET. Puoi leggere ulteriori informazioni su questi: Here And here

+0

Hey JAVE, grazie per la risposta.Ora che ho rimosso i metodi, quando si cancella, riporta un errore nella "editAction", qualsiasi ragione per cui viene chiamata anche quell'azione di route? –

+0

@AnthBieb: hai rimosso la parte 'methods' ma ti suggerisco di mantenerla; questo è semanticamente corretto. l'errore non è nelle rotte ma nella richiesta url (è necessario chiamarlo con il metodo DELETE, PUT o POST impostato) – DonCallisto

+0

@AnthBieb, potresti condividere l'errore? –

3

Hai generato azioni con crud?

Ho trovato una soluzione per il problema.

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

Il codice del commento è da crud, non funziona. Ho lo stesso errore (nessuna route trovata per "OTTENERE ...) Non ora perché symfony tenta di usare un modulo da eliminare. rimuove solo l'entità è il modo corretto per me.

1

Invece di questo nella vista:

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

uso una forma:

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

stesso per modulo di modifica

Problemi correlati