我正在尝试使用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',
];
}
}
答案 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'],
];
}