2017-02-18 16 views
0

私は、実行時にレコードがテーブルに存在することを確認し、そのレコードを返すコントローラ内の関数を持っています。この機能は、同じコントローラ内のモデルの検証として使用されます。たとえば:関数実行後にコントローラからモデルへ変数を渡す方法Yii2

public function actionSave() { 
    $model = new TestModel() { 
      if ($this->somethingValidate()) { 
       try { 
        --- REST OF THE CODE --- 

どのように私は今、TestModel$someVariable変数を渡すと、どちらか保存するかbeforeSave上のデータを操作することができます

public function somethingValidate() { 

    $someVariable = SomeTable::find()->where(['some_id' => $someVariable])->one(); 
    if ($model) { 
     return $model; 
    } else { 
     return false; 

はここで、コントローラの検証一部です。

ご協力いただきまして誠にありがとうございます。

+0

最初に例を正しく理解してください。そこに '$ model'とは何ですか? '$ someVariable'はどこから取りましたか? – Bizley

+0

'$ model'はRESTful呼び出しで保存されている実際のモデルです。' $ someVariable'は別のテーブル、異なるモデルから取得され、検証のためにのみ使用されます。レコードが存在する場合、 '$ model'テーブルで参照されるidフィールドがあります。ここで' $ someVariable-> id'を保存する必要があります。プロジェクトの性質上、私は良いコード例を提供できません。 – TenderloinSky

答えて

1

例えば、Investmentの量は、Proposalの値min_investmentの値以上である必要があります。以下はInvestmentモデルのbeforeValidate()関数です。

public function beforeValidate() 
    { 
     parent::beforeValidate(); 

     $proposal = Proposal::findOne($this->proposal_id); 

     if ($this->amount < $proposal->min_investment) 
     { 
      $this->addError('amount', Yii::t('app', 'Minimum amount should be ' . $proposal->min_investment)); 
      return FALSE; 
     } 

     return TRUE; 
    } 

これは達成しようとしていることですか?

+0

それは基本的にそれです。さて、本当に必要なのは、検証が成功した後、 '$ proposal-> id'を別のモデルに保存する必要があることです。 – TenderloinSky

+0

私はまだアプリケーションのロジックを理解していません。 'afterSave()'関数を持つ 'Proposal'モデルのフルコードを投稿した方が、もっと便利なのでしょうか? 'afterSave()'関数の中で、別の行/データを 'ProposalLog'モデルに作成します。 –

関連する問題