Yii2 rest create - 保存到DB

时间:2016-04-06 16:15:54

标签: rest yii2

我正在尝试使用yii2 rest api controller,标准创建操作从表单中保存数据。在DB中创建了新行,并返回了id,但是没有保存来自POST的数据 - 只有零出现在DB中,然后我覆盖了我自己创建的动作,相同的情况。但如果我直接保存到DB,没有rest api controller,数据就会成功保存。 什么可以成为这种奇怪的DB保存的原因?谢谢! 顺便说一下,在索引中我可以看到以下格式的帖子数据:{" _csrf":" wergferw"," table_name":{" sum&# 34;:25000"货币":1}}

控制器非常简单:

namespace frontend\controllers;
use yii;
use yii\rest\ActiveController;
use yii\web\Response;


class DemandController extends ActiveController
{
    public $modelClass = 'frontend\models\Demands';

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['contentNegotiator']['formats']['application/json']   
        =   Response::FORMAT_JSON;

        return $behaviors;
    }
}

我得到了回复:

<response><id>37</id></response>

模型由gii

生成
namespace frontend\models;

use Yii;

class Demands extends \yii\db\ActiveRecord
{

    public static function tableName()
    {
        return 'demands';
    }

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

    public function attributeLabels()
    {
        return [
            'sum' => 'Sum',
            'currency' => 'Currency',
        ];
    }
}

4 个答案:

答案 0 :(得分:0)

如果数据库中没有任何已发布的数据,则对我来说这听起来像是一个帖子格式问题。检查您的HTTP Post标头是否为“Content-Type:application / x-www-form-urlencoded”。

答案 1 :(得分:0)

我也遇到了这个问题,所以在改变这条线之后,它对我有用了.. 您尝试更改yii / rest / createAction

中的model-&gt; load()方法
public function run()
{


    $model->load(Yii::$app->getRequest()->getBodyParams(), '');
    change this line to 
    $model->load(Yii::$app->getRequest()->getBodyParams());


 }

请参阅此链接以获取更多信息 - http://www.yiiframework.com/doc-2.0/yii-base-model.html#load()-detail

model-&gt; load($ data,$ formName) - $ data应该是数组的$ _GET或$ _POST值,$ formName用于将数据加载到模型中。如果未设置,则使用formName()。所以你必须在createAction类中更改model-&gt; load()。

答案 2 :(得分:0)

最好你必须覆盖activecontroller默认的create action然后尝试

 class CabController extends ActiveController
   {
       public $modelClass = 'api\modules\v1\models\Cab';

        public function actions(){

            $actions = parent::actions(); 
            unset($actions['create']);
            unset($actions['update']);
            unset($actions['index']);          
            return $actions;
       }

    /* Declare methods supported by APIs */
      protected function verbs(){
          return [
            'create' => ['POST'],
            'update' => ['PUT', 'PATCH','POST'],
            'delete' => ['DELETE'],
            'view' => ['GET'],
            'index'=>['GET'],

        ];


    }
    public function actionCreate(){ 

        Yii::$app->response->format = \yii\web\Response::FORMAT_JSON;
        $model = new Cab;
        $post_data = Yii::$app->request->post();
        $model->load($post_data);   
        $model->save(false);            
        return $model;
  }    

答案 3 :(得分:0)

在模型中包含安全列

public function rules()
{
    return [
        [['sum', 'currency'], 'safe'],
    ];
 }