2017-02-22 53 views
0

Я создаю API в yii2, все методы работают отлично с помощью метода put. Я получаю данные в методе before_save, но получаю ниже ошибки при ее сохранении. тип 500,
»:Yii2 Rest api put метод return Внутренняя ошибка сервера - не удалось обновить объект по неизвестной причине

{ "имя": "Внутренняя ошибка сервера", "сообщение": "Не удалось обновить в объект по неизвестной причине.", "код": 0, "Статус" «: "юй \ Web \ 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; 
    } 

} 

Вот файл модели product.php

<?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'], 
     ]; 
    } 
} 

И это мой 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'] 
         ], 
        ] 
     ]); 
    } 

Try с передачей данных в json

{ 
    "name": "product name" 

}