Yii2 rest创建-保存到数据库
我正在尝试使用Yi2 rest api控制器标准创建操作保存表单中的数据。在DB中创建新行,并返回id,但POST中的数据并没有保存-DB中只显示零,然后我用自己的一个重写了create操作,相同的情况。但如果我直接保存到DB,而不使用RESTAPI控制器,则数据保存成功。 为什么会如此奇怪地保存到DB?谢谢 顺便说一下,在索引中,我可以看到格式为:{“\u csrf”:“wergferw”,“table\u name”:{“sum”:25000,“currency”:1}的post数据 控制器非常简单:Yii2 rest创建-保存到数据库,rest,yii2,Rest,Yii2,我正在尝试使用Yi2 rest api控制器标准创建操作保存表单中的数据。在DB中创建新行,并返回id,但POST中的数据并没有保存-DB中只显示零,然后我用自己的一个重写了create操作,相同的情况。但如果我直接保存到DB,而不使用RESTAPI控制器,则数据保存成功。 为什么会如此奇怪地保存到DB?谢谢 顺便说一下,在索引中,我可以看到格式为:{“\u csrf”:“wergferw”,“table\u name”:{“sum”:25000,“currency”:1}的post数据 控制器
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>
如果数据库中没有显示任何发布的数据,我觉得这似乎是一个发布格式问题。检查您的HTTP帖子标题是否有“Content Type:application/x-www-form-urlencoded”。我也有这个问题,因此在更改这一行后,它对我有效。。 您尝试更改yii/rest/createAction中的model->load()方法
public function run()
{
$model->load(Yii::$app->getRequest()->getBodyParams(), '');
change this line to
$model->load(Yii::$app->getRequest()->getBodyParams());
}
有关更多信息,请参阅此链接-
model->load($data,$formName)-$data应该是数组的$\u GET或$\u POST值,$formName用于将数据加载到模型中。如果未设置,则使用formName()。因此,您必须更改createAction类中的model->load()。最好覆盖activecontroller默认的创建操作,然后重试
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;
}
在模型中包含安全列
public function rules()
{
return [
[['sum', 'currency'], 'safe'],
];
}
您可以发布控制器和模型的内容吗?我怀疑问题就在那里。如何将数据加载到模型中?是的,application/x-www-form-urlencoded,如何更改?也许我应该使用ajax发送帖子数据,并将其更改为Json?您需要能够从发送帖子所使用的工具或语言控制http头。嗯。。因此,我的collegue编写了自己的创建方法,开箱即用的方法无法正常工作
public function rules()
{
return [
[['sum', 'currency'], 'safe'],
];
}