Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Yii2 rest创建-保存到数据库_Rest_Yii2 - Fatal编程技术网

Yii2 rest创建-保存到数据库

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数据 控制器

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