2014-09-06 19 views

risposta

28

Non sono sicuro se stai chiedendo azioni aggiuntive accanto a CRUD o solo per CRUD, quindi scrivo nei dettagli per entrambi i casi.

In primo luogo, il framework include \yii\rest\ActiveController che fornisce la tipica operazione API restful e la gestione degli URL.

In sostanza, il controller predefinisce le operazioni CRUD come segue:

POST /resource ->actionCreate -> Crea la risorsa

GET /resource/{id} ->actionView -> Leggi la risorsa

PUT, PATCH /resource/{id} ->actionUpdate - > Aggiorna la risorsa

DELETE /resource/{id} ->actionDelete -> Eliminare la risorsa

GET /resource ->actionIndex -> Elenco di tutte le risorse

L'URL regole di routing e la definizione delle azioni possono essere trovati in \yii\rest\ActiveController, \yii\rest\UrlRule e la rispettiva \yii\rest\*Action.

In secondo luogo, se si desidera aggiungere API più riposante nel controllore, si può semplicemente scrivere il più actionXxxxx(), e nella configurazione, aggiungere le seguenti regole url sotto urlManager:

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'rules' => [ 
     [ 
      'class' => 'yii\rest\UrlRule', 
      'controller' => ['resource'], 
      'pluralize' => false, 
      'extraPatterns' => [ 
       'POST {id}/your_preferred_url' => 'xxxxx', // 'xxxxx' refers to 'actionXxxxx' 
      ], 
     ], 
    ], 
], 

In effetti, questo genererà una nuova regola di routing, che richiede POST /resource/{id}/your_preferred_url invocherà actionXxxxx del tuo ResourceController.

+0

grazie. questo mi ha salvato il tempo .. –

+0

Grazie, funziona come un fascino. Piccola nota: questo modello extra sarà per ogni controller specificato, ma è possibile aggiungere un'altra regola con altri controller. –

2

Ecco un buon esempio utilizzando Yii 2 modello di applicazione avanzata

https://github.com/deerawan/yii2-advanced-api

più in dettaglio di questo progetto http://budiirawan.com/setup-restful-api-yii2/

inoltre è possibile utilizzare Yii 2 modello di domanda di base se si desidera . quello che devi fare è seguire questo tipo di struttura di cartelle (v1 per la versione) (Yii doc -A module may consist of sub-modules.)(GiovanniDerks - backend sub-modules)

-modules 
--api 
---v1 
----controllers 
----models