2012-11-17 26 views
6

में सशर्त रूप से आवश्यक है मैं ज़ेंड फ्रेमवर्क 2 का उपयोग कर एक आवेदन कर रहा हूं। मैं InputFilter का उपयोग कर इनपुट को मान्य कर रहा हूं। क्या यह संभव है, कुछ Input एस को सशर्त रूप से आवश्यक बनाना है? मेरा मतलब है मैं उस तरह कोड है:ज़ेंड फ्रेमवर्क के 2 इनपुटफिल्टर

$filter = new \Zend\InputFilter\InputFilter(); 
$factory = new \Zend\InputFilter\Factory(); 
$filter->add($factory->createInput(array(
    'name' => 'type', 
    'required' => true 
))); 
$filter->add($factory->createInput(array(
    'name' => 'smth', 
    'required' => true 
))); 

मैं क्षेत्र something, आवश्यक होने की, केवल जब type बराबर 1 है चाहता हूँ। क्या ऐसा करने का एक अंतर्निहित तरीका है? या मैं सिर्फ कस्टम सत्यापनकर्ता बनाना चाहिए?

उत्तर

8

सबसे पहले, आप के रूप में खाली/बातिल मूल्यों पर सत्यापन सक्षम करना चाहें Empty values passed to Zend framework 2 validators

आप निम्न उदाहरण में एक कॉलबैक इनपुट फिल्टर का उपयोग कर सकते हैं:

$filter = new \Zend\InputFilter\InputFilter(); 
$type = new \Zend\InputFilter\Input('type'); 
$smth = new \Zend\InputFilter\Input('smth'); 

$smth 
    ->getValidatorChain() 
    ->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL)) 
    ->attach(new \Zend\Validator\Callback(function ($value) use ($type) { 
     return $value || (1 != $type->getValue()); 
    })); 

$filter->add($type); 
$filter->add($smth); 

यह मूलतः काम करेंगे जब मूल्य smth कोई रिक्त स्ट्रिंग एक है type के लिए मान 1 नहीं है। यदि type का मान 1 है, तो smth को खाली स्ट्रिंग से अलग होना चाहिए।

+0

ध्यान दें कि इंटरफ़ेस की जांच करने के PHP के बहुत ढीले तरीके के कारण, एक वैधता को विधि 'isValid ($ value, array $ context = [])' के साथ परिभाषित करना भी संभव है। इस तरह, '$ संदर्भ' का उपयोग प्रासंगिक रूप से सत्यापन को सक्षम/अक्षम करने के लिए किया जा सकता है। – Ocramius

-3

दुर्भाग्य से तुम इतने तरह अपने शर्तों के आधार पर आवश्यक विकल्प सेट करना होगा:

$filter->add($factory->createInput(array(
    'name' => 'smth', 
    'required' => (isset($_POST['type']) && $_POST['type'] == '1'), 
))); 
+4

यह गलत है। इस प्रकार आप फ़िल्टर के संबंध में फ़िल्टर के संबंध में मूल्य निर्धारित कर रहे हैं जिसे फ़िल्टर किया जाना है: यह अवधारणात्मक रूप से गलत है। – Ocramius

1

मुझे ओक्रैमियस द्वारा काम करने के लिए उदाहरण नहीं मिल सका, $ प्रकार-> getValue हमेशा शून्य था। मैंने कोड को $ संदर्भ का उपयोग करने के लिए थोड़ा बदल दिया और यह मेरे लिए चाल है:

$filter = new \Zend\InputFilter\InputFilter(); 
$type = new \Zend\InputFilter\Input('type'); 
$smth = new \Zend\InputFilter\Input('smth'); 

$smth 
    ->getValidatorChain() 
    ->attach(new \Zend\Validator\NotEmpty(\Zend\Validator\NotEmpty::NULL)) 
    ->attach(new \Zend\Validator\Callback(function ($value, $context){ 
     return $value || (1 != $context['type']); 
    })); 

$filter->add($type); 
$filter->add($smth);