2017-11-17 4 views
0

データをロードするために条件を取り出すと、データをdbに保存すると、$ _POSTは値を取得します。この方法は私の他のプロジェクトでは動作しますが、ここでは動作しません。 if(isset($_POST['money']) && isset($_POST['username'])){を使用してデータを保存すると機能しますが、load()の機能は動作しません。

コントローラ

public function actionSend() { 
    $model = new User(); 
    $model->getErrors(); 
    if ($model->load(Yii::$app->request->post())) { 
     $model->money = 'something'; 
     $model->username = 'something'; 
     $model->save(); 
    } 
    return $this->render('send', [ 
     'model' => $model 
    ]); 
} 

モデル

<?php 

namespace app\models; 
use yii\db\ActiveRecord; 

use Yii; 

class User extends \yii\db\ActiveRecord { 
    public static function tableName() { 
     return 'user'; 
    } 

    public function rules() { 
     return [ 
      [['username', 'money'], 'safe'], 
      [['username', 'password'], 'string', 'max' => 15], 
      [['auth_key', 'access_token'], 'string', 'max' => 32], 
      [['money'], 'string', 'max' => 8], 
     ]; 
    } 

    public function attributeLabels() { 
     return [ 
      'id' => 'ID', 
      'username' => 'Username', 
      'password' => 'Password', 
      'auth_key' => 'Auth Key', 
      'access_token' => 'Access Token', 
      'money' => 'Money', 
     ]; 
    } 
} 

ビュー

<?php 
use yii\helpers\Html; 
use yii\bootstrap\ActiveForm; 
?> 

<h2>Send</h2> 

<?php $form = ActiveForm::begin([ 
    'layout' => 'horizontal', 
    'fieldConfig' => [ 
     'template' => "{label}\n<div class=\"col-lg-3\">{input}</div>\n<div class=\"col-lg-8\">{error}</div>", 
     'labelOptions' => ['class' => 'col-lg-1 control-label'], 
    ], 
]); ?> 
    <?= $form->field($model, 'username')->textInput(['name' => 'username']) ?> 

    <?= $form->field($model, 'money')->textInput(['name' => 'money'])?> 

    <div class="form-group"> 
     <div class="col-lg-offset-1 col-lg-11"> 
      <?= Html::submitButton('Send', ['class' => 'btn btn-success']) ?> 
     </div> 
    </div> 

<?php ActiveForm::end(); ?> 

答えて

3

変更この

public function actionSend() { 
    $model = new User(); 
    $model->getErrors(); 

    /* set the second parameters of load to empty string */ 
    if ($model->load(Yii::$app->request->post(), '')) { 
     $model->money = 'something'; 
     $model->username = 'something'; 
     $model->save(); 
    } 
    return $this->render('send', [ 
     'model' => $model 
    ]); 
} 
にあなたのコントローラ

loadメソッドの実装を確認すると、 loadは2つのパラメータをとります。最初は割り当てたいデータ、2番目はデータのプレフィックス名です。

2番目のパラメータの使い方を示す例を見てみましょう。 (私たちはあなたのフォーム名がUserであると仮定)

$data1 = [ 
    'username' => 'sam', 
    'money' => 100 
]; 

$data2 = [ 
    'User' => [ 
     'username' => 'sam', 
     'money' => 100 
    ], 
], 

// if you want to load $data1, you have to do like this 
$model->load($data1, ''); 

// if you want to load $data2, you have to do like this 
$model->load($data2); 

// either one of the two ways, the result is the same. 
echo $model->username; // sam 
echo $model->money;  // 100 

は、それが役に立つかもしれない願っています。

関連する問題