2016-05-04 20 views
5

in meinem ControllerYii2 REST-API PUT-Methode funktioniert nicht

` Namespace app \ api \ modules \ v1 \ Controller;

use yii\rest\ActiveController; 
use yii\filters\VerbFilter; 
use yii\web\Response; 

class CountryController extends ActiveController 
{ 
public $modelClass = 'app\models\Country'; 

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => 'yii\filters\ContentNegotiator', 
      'only' => ['index', 'view','create','update','search'], 
      'formats' => ['application/json' =>Response::FORMAT_JSON,], 

     ], 
     'verbs' => [ 
      'class' => VerbFilter::className(), 
      'actions' => [ 
       'index'=>['get'], 
       'view'=>['get'], 
       'create'=>['post'], 
       'update'=>['PUT'], 
       'delete' => ['delete'], 
       'deleteall'=>['post'], 
       'search' => ['get'] 
      ], 

     ] 
    ]; 
} 
}` 

Ich versuche, aus meinem POSTMAN App

Für erstellen verwende ich POST http://localhost/myapp/api/v1/countries Works fine.But Für Update I genutzt http://localhost/myapp/api/v1/countries/16 es 16 gibt den Datensatz als JSON-Ausgabe nicht wie erwartet zu aktualisieren.

Was war los? Vielen Dank!!

+0

Wenn der PUT Aufruf das richtige Objekt gibt es die Update fein arbeiten scheint. Sind Sie sicher, dass die Werte, die Sie veröffentlichen, in Ihrem 'rules()' gesetzt sind? – jagsler

Antwort

0

Hier ist eine weitere Option, wenn Sie sich wohl fühlen. Anstelle von behaviors() können Sie etwas hinzufügen und es wird dem gleichen Zweck dienen und Sie werden kein Problem haben.

public function actions() 
{ 
    $actions = parent::actions(); 
    unset($actions['index']); 
    unset($actions['create']); 
    unset($actions['delete']); 
    unset($actions['update']); 
    unset($actions['view']); 
    return $actions; 
} 
3

In POSTMAN App, öffnen Sie die Registerkarte Anforderungs Körper und wählen Sie x-www-form-urlencoded statt form-data. Das hat für mich funktioniert.

x-www-form-urlencoded selected