我正在写一些东西,如果您选择某个按钮或下拉列表,我想更改某个字段的规则。基本上,逻辑是,检查一个按钮或从选择中选择一个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