Я проверил исходный код класса проверки CI сейчас.
Они позволяют устанавливать правила как
array('field' => "valid|length[5]|foo|callback_bar")
Я не видел ни одноговложенные квадратные скобки или трубы внутри квадратных скобок.В Документах четко сказано, что у вас может быть только один параметр.Строка внутренне установлена на $_rules
.При проверке строка сначала будет exploded
в массиве, поэтому приведенное выше будет иметь значение $rules
.
'field' => array('valid', 'length[5]', 'foo', 'callback_bar')
Затем они будут проходить через массив, проверяя, является ли $rule
обратный вызов с substr()
.Затем они проверяют, есть ли в $rule
квадратные скобки с шаблоном "/(.*?)\[(.*?)\]/"
, и если это так, снимите его с $rule
и сохраните внутреннюю часть скобок как $param
.И наконец, они просто выполняют $rule
как переменную функцию с обнаруженным параметром, например, $rule(POST[$field], 5)
;
Как вы можете видеть, они не разделяют все за один раз.Это не отвечает на ваш вопрос, но пролить некоторый свет на внутреннюю логику CI для запуска их Validator может помочь вам переосмыслить ваш подход.
Мнение : Я хотел бы добавить, что их подходэто ужасноЦепочки валидаторов являются основными кандидатами на Командный шаблон .Конечно, приятно указывать валидаторы маленькими и компактными строками, но вы платите это большим количеством уродливого жонглирования строк, когда дело доходит до запуска цепочки.Посмотрите, как Zend Framework делает это, или посмотрите на PHP собственные функции фильтра .