我正在寫一些東西,如果您選擇某個按鈕或下拉列表,我想更改某個字段的規則。基本上,邏輯是,檢查一個按鈕或從選擇中選擇一個ID,你不需要填充地址字段。我一直在努力做form_validation內的事情,而不是在他那裏控制器我可以真正做到這樣的事情從MY_Form_validation的codeigniter中刪除規則
if(isset($_POST['checkbox'])){
//check rules
}
所以,我已經做到了這一點:
public function check_address($str,$prefix=null){
$this->set_message('check_address','Please select an address or fill out a new one');
//var_dump($this->_field_data);exit;
$remove=array('address_line1','address_line2','address_line3','city','postcode');
if($prefix!==null){
foreach($remove as &$r){
$r=$prefix.'_'.$r;
}
}
unset($r);
foreach($this->_field_data as $key=>$f){
if(in_array($key,$remove)){
unset($this->_field_data[$key]);
}
}
}
這種工作方式我想要它,但我認爲我已經干擾了codeiginter的Form_Validation類,因爲它會拋出一個錯誤,指出我的數組中沒有設置所需的索引。
錯誤消息
A PHP Error was encountered
Severity: Notice
Message: Undefined index: billing_address_line1
Filename: libraries/Form_validation.php
Line Number: 481
我不是真的太知道我怎麼能達到什麼我想做的事情沒有什麼干擾笨的需求?是否有另一個數組我需要刪除,以便該鍵不排序?
我還通過刪除所需要的規則,但所需要的功能,我認爲一定是已經運行做到了這一點,現在
foreach($this->_field_data as $key=>&$f){
if(in_array($key,$remove)){
//unset($this->_field_data[$key]);
//str_replace('/required\|/','',$f['rules']);
//str_replace('/required/','',$f['rules']);
foreach($f['rules']as$r=>$val){
$val=strtolower($val);
if($val=='required')unset($f['rules'][$r]);
}
var_dump($f);
}
}
unset($f);
現在,這並不需要什麼?
規則
$this->con['validation']['checkout']=array(
array('field'=>'address_line1','label'=>'Address line 1','rules'=>'required|min_length[3]|max_length[200]|check_basket'),
array('field'=>'address_line2','label'=>'Address line 2','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'address_line3','label'=>'Address line 3','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'city','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[50]'),
array('field'=>'postcode','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[9]|valid_postcode'),
array('field'=>'shipping_addressID','label'=>'Address','rules'=>'check_address[]'),
array('field'=>'billing_address_line1','label'=>'Billing address line 1','rules'=>'required|min_length[3]|max_length[200]'),
array('field'=>'billing_address_line2','label'=>'Billing address line 2','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'billing_address_line3','label'=>'Billing address line 3','rules'=>'min_length[3]|max_length[200]'),
array('field'=>'billing_city','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[50]'),
array('field'=>'billing_postcode','label'=>'Town/City','rules'=>'required|min_length[3]|max_length[9]|valid_postcode'),
array('field'=>'billing_address_same','label'=>'Billing Address','rules'=>'check_address[billing]'),
array('field'=>'billing_addressID','label'=>'Billing address','rules'=>'check_address[billing]')
);
'* _addressID'字段的用途是什麼? – DFriend
@Driend由於我希望能夠將地址添加到數據庫中,並在同一用戶返回時再次選擇它們以避免多次輸入相同的地址。這就是爲什麼我有'* _addressID',並且如果沒有選擇'* _addressID',那麼用戶需要填寫與該地址相關的地址字段,無論是運輸還是帳單。 – sourRaspberri