आप उन्हें एक साथ श्रृंखला नहीं कर सकते और कस्टम संदेश मिलता है, के रूप में श्रृंखलन के कार्यान्वयन की वजह से अलग-अलग नियमों वह करने का विरोध किया है क्योंकि आप फोन पिछले कस्टम संदेश केवल नियम-सेट करने के लिए आवंटित किया जाएगा।
इस प्रदर्शन करने के लिए, मैं इसे Git से क्लोन, एक बिन निर्देशिका बनाया है, और इस test.php
<?php
set_include_path(implode(PATH_SEPARATOR, array(
realpath('../library')
)));
function __autoload($class_name) {
include $class_name . '.php';
}
use Respect\Validation\Validator as v;
try {
$chained = Respect\Validation\Validator::create()
->key('foo',
v::length(20)->setName('bar')->setTemplate('Custom length message.')
->alnum()->setName('baz')->setTemplate('Custom alnum message.')
);
print_r($chained);
$chained->assert(array(
'foo' => 'Hello, world!',
));
} catch (Respect\Validation\Exceptions\ValidationException $exception) {
$errors = $exception->findMessages(array(
'bar',
'baz',
));
var_dump($errors);
}
the print_r($chained) shows us:
Respect\Validation\Validator Object
(
[rules:protected] => Array
(
[00000000791c0e000000000030f3f15e] => Respect\Validation\Rules\Key Object
(
[mandatory] => 1
[reference] => foo
[validator] => Respect\Validation\Validator Object
(
[rules:protected] => Array
(
[00000000791c0e030000000030f3f15e] => Respect\Validation\Rules\Length Object
(
[minValue] => 20
[maxValue] =>
[inclusive] => 1
[name:protected] =>
[template:protected] =>
)
[00000000791c0e020000000030f3f15e] => Respect\Validation\Rules\Alnum Object
(
[additionalChars] =>
[stringFormat] => /^(\s|[a-zA-Z0-9])*$/
[name:protected] =>
[template:protected] =>
)
)
[name:protected] => baz
[template:protected] => Custom alnum message.
)
[name:protected] => foo
[template:protected] =>
)
)
[name:protected] =>
[template:protected] =>
)
आप देख सकते हैं के साथ थोड़ा अपने नमूना संशोधित कि नियम-सेट अंतिम नाम लेने और साथ ही अंतिम टेम्पलेट में पारित किया गया, और वास्तविक सत्यापन वस्तुओं में से कोई भी नाम या टेम्पलेट नहीं मिला। मैं वास्तव में ऐसा करने के लिए लाइब्रेरी में किसी भी तरह से नहीं देख रहा हूं जिसे आप करने का प्रयास कर रहे हैं।
तो मैंने एक रास्ता बनाने का फैसला किया। मेरे में ../bin निर्देशिका मैंने इस कक्षा को बनाया, वाल्डिटर वर्ग का विस्तार किया।
<?php
use Respect\Validation\Validator as v;
class BubbaValidator extends v {
public function getRuleset($rulename = null){
if (is_null($rulename)) return $this->rules;
foreach ($this->rules as $rule){
if ($rule->getName() == $rulename){
return $rule;
}
}
}
public function getValidatorRules($rulesetName, $ruleType=null){
$ruleset = $this->getRuleset($rulesetName);
$validators = $ruleset->validator;
if (is_null($ruleType)){
return $validators;
}
foreach ($validators->rules as $key=>$validator){
if (get_class($validator) === 'Respect\Validation\Rules\\'.$ruleType){
$validator->name = "bar";
$validator->template = "bubba rocks";
$validators->rules[$key]->name = "bar";
$validators->rules[$key]->template = "bubba rocks";
return $validator;
}
}
}
public function setValidatorRuleName($rulesetName, $ruleType, $name){
$ruleset = $this->getRuleset($rulesetName);
$validators = $ruleset->validator;
foreach ($validators->rules as $key=>$validator){
if (get_class($validator) === 'Respect\Validation\Rules\\'.$ruleType){
$validators->rules[$key]->name = $name;
return $validator;
}
}
}
public function setValidatorRuleTemplate($rulesetName, $ruleType, $template){
$ruleset = $this->getRuleset($rulesetName);
$validators = $ruleset->validator;
foreach ($validators->rules as $key=>$validator){
if (get_class($validator) === 'Respect\Validation\Rules\\'.$ruleType){
$validators->rules[$key]->template = $template;
return $validator;
}
}
}
}
तो मैं स्क्रिप्ट modifed और यह
भाग गया
<?php
set_include_path(implode(PATH_SEPARATOR, array(
realpath('../library'),
realpath(__DIR__)
)));
function __autoload($class_name) {
include $class_name . '.php';
}
use BubbaValidator as v;
try {
$chained = new BubbaValidator();
$chained->key('foo',
v::length(20)->setName('bar')->setTemplate('Custom length message.')
->alnum()->setName('baz')->setTemplate('Custom alnum message.')
);
$chained->setValidatorRuleName('foo', 'Alnum', 'baz');
$chained->setValidatorRuleTemplate('foo', 'Alnum', 'Bubba\'s Custom Alnum!');
$chained->setValidatorRuleName('foo', 'Length', 'bar');
$chained->setValidatorRuleTemplate('foo', 'Length', 'Bubba\'s Custom Length!');
$chained->assert(array(
'foo' => 'Hello, world!',
));
} catch (Respect\Validation\Exceptions\ValidationException $exception) {
$errors = $exception->findMessages(array(
'bar',
'baz',
));
var_dump($errors);
}
अंत में इस उत्पादन प्राप्त करने के लिए:
D:\Users\Bubba\git\Validation\bin>php test.php
array(2) {
["bar"]=>
string(22) "Bubba's Custom Length!"
["baz"]=>
string(21) "Custom alnum message." }
मजेदार था कि! के रूप में ऐसा लगता है कि `setTemplate साथ एक बग था
1. बेवकूफ सवाल है, लेकिन कितनी पुरानी है, अपने सम्मान का निर्माण है()' एक साल से काम या तो वापस, "_when अपवाद बनाया जाता है, यह अगर टेम्पलेट की जाँच करता है वहाँ है, लेकिन यह null_ "https://github.com/Respect/Validation/issues/64 के रूप में वापस आता है। 2. मुझे इस फ़ंक्शन के लिए कोई डॉको नहीं मिला, क्या यह सार्वजनिक एपीआई के हिस्से के रूप में है (और इसलिए, क्या आप जानते हैं कि यह _should_ काम करता है जैसा आप उम्मीद कर रहे हैं)? 3. क्या आपने संयोजन में विभिन्न सत्यापनकर्ताओं की कोशिश की है? उदाहरण के लिए यह हमेशा आखिरी है जो अपना संदेश जोड़ता है? – Sepster
4. बस ब्याज से बाहर, क्या आपको 'जानकारी प्राप्त करने के लिए' getfullMessage(); से अपेक्षित आउटपुट मिलता है (http://formocument.com/Respect/Validation/#feature-guide/informative-exceptions) में डॉको? यह कम से कम एक सुराग दे सकता है कि यह संदेश _within_ जो खो गया है, या अपवाद को आउटपुट करने में त्रुटि है। – Sepster
@ सेप्स्टर 1. मैं नवीनतम देव-मास्टर का उपयोग कर रहा हूं। 2।मुझे कोड को देखकर फ़ंक्शन मिला, यह एक सार्वजनिक विधि है इसलिए कोई इसे सार्वजनिक एपीआई का हिस्सा मान लेगा। 3. हां यह हमेशा श्रृंखला में अंतिम वैधता प्रतीत होता है। 4. 'getFullMessage() 'कस्टम वाले के बजाय डिफ़ॉल्ट संदेशों को आउटपुट करता है। – Petah