2017-02-22 1 views
0

yii2でAPIを作成していますが、すべてのメソッドはputメソッドのうまく機能しています。私はbefore_saveメソッドでデータを取得していますが、保存時にエラー以下になっています。Yii2残りのAPIメソッドを返す内部サーバーエラー - 不明な理由でオブジェクトを更新できません

{ "名": "内部サーバーエラー"、 "メッセージ": "不明な理由 オブジェクトの更新に失敗しました。"、 "コード":0、 "ステータス":500、
「タイプ「: "のYii \ウェブ\のServerErrorHttpException"}

ここに私のコントローラファイルである

ProductsController.php

<?php 

namespace app\controllers; 

use yii\rest\ActiveController; 
use yii\filters\auth\HttpBearerAuth; 


class ProductsController extends ActiveController { 

    public $modelClass = 'app\models\Product'; 

    public function __construct($id, $module, $config = array()) { 

     parent::__construct($id, $module, $config); 
    } 


    public function behaviors() { 
     $behaviors = parent::behaviors(); 

     $behaviors['authenticator'] = [ 
      'class' => HttpBearerAuth::className(), 
     ]; 

     return $behaviors; 
    } 

} 

ここ

<?php 

namespace app\models; 

use yii\db\ActiveRecord; 
use yii; 

class Product extends ActiveRecord { 

    public static function tableName() { 
     return '{{%o2o_products}}'; 
    } 

    public function rules() { 
     return [ 
      [['name'], 'required'], 
     ]; 
    } 
} 

Product.php

モデルファイル であり、これは私のweb.php

'urlManager' => [ 
      'enablePrettyUrl' => true, 
      'enableStrictParsing' => false, 
      'showScriptName' => false, 
      'rules' => [ 
       '<alias:index|about|contact|login>' => 'site/<alias>', 
       ['class' => 'yii\rest\UrlRule', 'controller' => 'user'], 
       ['class' => 'yii\rest\UrlRule', 'controller' => 'products'], 
       ['class' => 'yii\rest\UrlRule', 'controller' => 'orders'], 

      ], 
     ] 

私が作成し、更新文にruleを削除してみましたです。成功はない。

他に必要なことがあれば教えてください。

答えて

0

私は最近同じ問題に直面していましたが、解決策はデータが正しく渡されていないことです。通常、それはjsonとして渡す必要があります。

namespace app\controllers; 

use yii\rest\ActiveController; 
use yii\filters\auth\HttpBearerAuth; 
use yii\filters\VerbFilter; 
use yii\web\Response; 
use yii\helpers\ArrayHelper; 
class ProductsController extends ActiveController { 

    public $modelClass = 'app\models\Product'; 

    public function __construct($id, $module, $config = array()) { 

     parent::__construct($id, $module, $config); 
    } 

    public function behaviors() { 
     return ArrayHelper::merge(parent::behaviors(), [ 
        [ 
         'class' => HttpBearerAuth::className(), 
         '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'] 
         ], 
        ] 
     ]); 
    } 

json

{ 
    "name": "product name" 

} 
にデータを渡して試してみてください
関連する問題