2012-07-12 26 views
3

我想在我的模型中設置字段的值。該字段(源)位於數據庫中,但在表單上沒有用於捕獲數據的字段。我想設置該字段的值而不創建隱藏的表單字段。那可能嗎?Yii,不使用隱藏字段設置模型值

謝謝!

//in controller 
public function actionTest() 
       { 
     $model=new TestForm(); 
     $src = 'hello'; 
     $model->source($src); 
     echo $model->source; // hello 
     $this->render('_form',array('model'=>$model));  
       } 

的形式遂以當然$源不在彥博,因爲沒有現場捕捉到$源

但是我已經設置了一個$模型 - 值>源代碼,但這個值似乎沒有保存,因爲它沒有保存在數據庫中。

解決這個問題的唯一方法就是使用隱藏字段並將$ source的值傳遞給窗體。

有沒有一種方法來設置$ model->源和這個值去在數據庫中,而不通過形式?

+1

請參閱http://www.yiiframework.com/doc/guide/1.1/en/form.model _Declaring安全屬性_我認爲您應該聲明源屬性爲不安全。如果你使用隱藏字段,攻擊者可以用螢火蟲改變它。 – 2012-07-12 12:33:33

回答

1

我會做這種方式。這沒什麼錯,你想在你的模型中保持一個非默認值,並且隱藏的輸入元素就是實現這一點的方法。

+0

我想我會接受這個答案。我只是覺得可能不需要製作一個隱藏的元素...... – rix 2012-07-12 12:02:37

+0

如果你想使用的值是一個敏感的用戶id,該怎麼辦?而且你不想讓用戶嘗試使用不同的ID。這仍然是最好的方式嗎? – johnsnails 2016-01-27 11:56:34

+0

@ johnsnails:這個問題是一個紅色的鯡魚。無論您是否將隱藏字段放在隱藏字段中,客戶提交的數據都應被認爲是惡意行爲,直到被證實爲止。他們可以添加儘可能多的領域,並給予他們想要的任何價值;您需要在服務器端實施安全策略。 – Jon 2016-01-27 12:51:35

0

那麼表單必須發佈到某個地方,並且在Yii建議回發到同一頁面。如果你需要顯示窗體時(因爲例如,當你手中有需要的數據的),然後創建一個隱藏的輸入控件設置的$source

public function actionUpdate($id) 
    { 
     $model=$this->loadModel($id); 

     // Uncomment the following line if AJAX validation is needed 
     // $this->performAjaxValidation($model); 

     if(isset($_POST['NotificationLog'])) 
     { 
      $model->attributes=$_POST['NotificationLog']; 
      if($model->save()) 
       $this->redirect(array('admin')); 
     } else { 
        // set defaults 
        $model->source = 'hello'; 
      } 

     $this->render('update',array(
      'model'=>$model, 
     )); 
    } 
0

做這樣的事情在你的規則函數模型類:在類

public function rules() { 

    return array(
     . 
     . 
     . 
     array('source', 'default', 'value' => 'hello'), 
    ); 
} 
+0

如果您希望該值成爲當前登錄的用戶ID,該怎麼辦?你能用這個方法使用這個值嗎?沒關係。我認爲這會奏效。 ['source','default','value'=> Yii :: $ app-> user-> id], – johnsnails 2016-01-27 11:54:27

相關問題