![](/img/trans.png)
[英]how to set rules form validation in my custom library in codeigniter
[英]How to set validation rules for custom CActiveRecord attributes in Yii?
我正在一個帶有數據庫的Yii項目上工作,該數據庫包含一個表,其中幾乎所有數據都以JSON格式保存在字段中( 這很瘋狂,但事實如此 ):
id INTEGER
user_id INTEGER
data LONGTEXT
此“ JSON字段” data
具有以下結構,並且除其他外包含圖像:
{
"id":"1",
"foo":"bar",
...
"data":{
"baz":"buz",
...
}
}
顯示它沒問題,但是現在我想使數據可編輯。 我的表格如下所示:
<?php
$form = $this->beginWidget('CActiveForm', array(
'id' => 'my-form',
'htmlOptions' => array('enctype' => 'multipart/form-data'),
'enableAjaxValidation'=>false,
));
?>
<div class="row">
<?php echo $form->labelEx($model, 'foo'); ?>
<?php
echo $form->textField($model, 'foo', array(...));
?>
<?php echo $form->error($model, 'foo'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model, 'baz'); ?>
<?php
echo $form->textField($model, 'data[baz]', array(...));
?>
<?php echo $form->error($model, 'data[baz]'); ?>
</div>
有用。 但是存在多個問題,這似乎是由同一件事引起的-他的表單字段未引用模型的屬性/屬性:
當我將foo
和baz
必填字段時( public function rules() { return array(array('foo, baz', 'required')); }
-定義了$foo
屬性) foo
表現出了所希望的行為,但baz
會導致“ foo不能為空”錯誤。 因此,我無法根據required
設置data[*]
。
如果表單無效並被重新加載,則所有data[*]
字段均為空。
data[*]
字段未標記為必填項。
有沒有解決這個問題而無需更改數據結構的方法? 不會有正確的方法,但是可能有解決方法。
以這種方式驗證字段是不可能的。 首先,如果要在模型中使用字段,則必須為活動記錄定義或存在於表中。 因此,如果您想驗證這種結構的唯一正確方法是:
class Model extends CActiveRecord {
// Define public varialble
public $data_baz;
public function rules(){
return array(
// Add it to rules
array( 'data_baz', 'required' )
);
}
public function attributeLabels(){
return array(
// Add it to list of labels
'data_baz' => 'Some field'
);
}
protected function beforeSave(){
if ( !parent::beforeSave() ) {
return false;
}
// Also you may create a list with names to automate append
$this->data['baz'] = $this->data_baz;
// And serialize data before save
$this->data = serialize( $this->data );
return true;
}
}
你的表格應該看起來像
<div class="row">
<?php echo $form->labelEx($model, 'data_baz'); ?>
<?php echo $form->textField($model, 'data_baz'); ?>
<?php echo $form->error($model, 'data_baz'); ?>
</div>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.