I CI's Validation class artık kaynak kodunu kontrol ettik.
Onlar kuralları gibi ayarlanmasına izin
array('field' => "valid|length[5]|foo|callback_bar")
Ben köşeli parantez içinde herhangi bir iç içe köşeli veya borularını görmedim. Docs açıkça sadece bir param olabilir, söylüyorlar. Dize $_rules
dahili ayarlanır. Doğrularken, dize exploded
ilk kez bir diziye olacak, bu yüzden yukarıdaki dört değerlendirmek istiyorum $rules
.
'field' => array('valid', 'length[5]', 'foo', 'callback_bar')
Dizi aracılığıyla Daha sonra döngü, $rule
substr()
ile bir geri çağırma olup olmadığını kontrol ediyor. Sonra "/(.*?)\[(.*?)\]/"
$rule
deseni ile kare parantez olup olmadığını kontrol edin ve eğer öyleyse, $rule
onu almak ve parantez iç kısmını saklamak olarak $param
. Ve son olarak, onlar sadece tespit param ile bir değişken fonksiyonu, örneğin gibi $rule
yürütmek $rule(POST[$field], 5)
;
Gördüğünüz gibi, onlar tek seferde her şeyi bölme değildir. Bu sorunuza cevap vermez, ama onların Validator çalışan almak için CI iç mantığına biraz ışık tutmak size yaklaşımı yeniden düşünmek yardımcı olabilir.
Opinion: Ben onların yaklaşımı korkunç olduğunu eklemek istiyorum. Validator Zincirler Command Pattern için başbakan adayı olan. Tabii, bu küçük ve kompakt dizeleri ile doğrulayıcılar belirtmek için güzel, ama aslında zinciri çalışırken gelince, çirkin dize hokkabazlık bir sürü tarafından bu ödeme. Zend Framework bunu yapar veya PHPs native filter functions bakmak nasıl bir görünüm var.