2016-04-06 15 views
0

私はyii2 rest apiコントローラ、標準作成アクションを使用してフォームからデータを保存しようとしています。新しい行がDBに作成され、IDが返されますが、POSTからのデータは保存されません.DBにはゼロだけが表示され、同じ状況で自分自身で作成アクションが上書きされます。しかし、DBに直接保存すると、残りのAPIコントローラーがなくても、データは正常に保存されます。 DBへのこのような奇妙な保存の理由は何ですか?ありがとう! ところで、インデックスでは、{"_csrf": "wergferw"、 "table_name":{"sum":25000、 "currency":1}}のポストデータを見ることができます。Yii2 rest create - DBに保存

コントローラは非常に投稿DATのいずれも場合

<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

はあなたのコントローラとモデルのコンテンツを投稿することができ、あなたのモデルで安全な列が含まれてみてくださいactivecontrollerのデフォルトはアクションを作成上書きする必要がありますか?私はこの問題がどこかにあると思う。 – spencer4of6

+0

この情報を追加 – shustr8

+0

データをモデルにどのようにロードしますか? –

答えて

0

によって生成される:シンプル:私は残りの部分に返信取得

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; 
    } 
} 

aはデータベースに表示され、ポストフォーマットの問題のように聞こえます。あなたのHTTPポストヘッダーに "Content-Type:application/x-www-form-urlencoded"があることを確認してください。

私もそれは私のために働いています。この行を変更した後になるような問題が生じています
+0

はい、application/x-www-form-urlencodedはどのように変更できますか?私はajaxを使用してPOSTデータを送信し、Jsonに変更する必要がありますか? – shustr8

+0

投稿を送信するために使用しているツールや言語からhttpヘッダーを制御できる必要があります。 – karpy47

0

.. あなたはモデル - > load()メソッドを変更しようとするのYii /休憩/ createAction内部

public function run() 
{ 


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


} 

このリンクを参照してください - > load($ data、$ formName) - $ dataはarrayの$ _GETまたは$ _POST値で、$ formNameはデータをモデルにロードする必要があります。設定されていない場合は、formName()が使用されます。したがって、あなたはcreateActionクラスのmodel-> load()を変更する必要があります。

+0

まあ。結果として、私の同僚は、自分の作成メソッドを書いて、ボックスの外は正しく動作していなかった – shustr8

0

より良いあなたが、その後

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; 
    }  
0

public function rules() 
{ 
    return [ 
     [['sum', 'currency'], 'safe'], 
    ]; 
} 
関連する問題