다차원 배열 유효성 검사를 지원하는 유효성 검사 클래스를 만들었습니다. 사용하고 싶지만 Phalcon이 유효성 검사 인스턴스를 검색하는 방법을 모르겠습니다.Phalcon : 양식과 함께 사용자 정의 유효성 검사 클래스를 사용하려면 어떻게해야합니까?
어떻게하면됩니까?
이 내 MultiDimensionalValidator 클래스입니다 :
/**
* Validates inputs with multidimensional names such as "names[fr]name'.
*
* @package Intlist\Validator
*/
class MultidimensionalValidator extends Validation
{
/**
* @param \Phalcon\Validation $validation
* @param string $attribute
*
* @return Validation\Message\Group|void
*/
public function validate($validation = null, $attribute = null)
{
$this->_data = $validation->_data;
$this->_messages = $validation->getMessages();
foreach ($this->_validators as $validator) {
$validator->validate($this, $attribute);
}
return $this->_messages;
}
/**
* Support for multidimensional array.
*
* @inheritdoc
*/
public function getValue($attribute)
{
$parts = $this->extractKeyParts($attribute);
$value = $this->_data;
while ($name = array_shift($parts)) {
if (!array_key_exists($name, $value)) {
return null;
}
$value = $value[$name];
}
return $value;
}
/**
* Extract the parts from a flattened multidimensional key.
*
* @param string $flattened
*
* @return array
*/
private function extractKeyParts($flattened)
{
$pos = strpos($flattened, '[');
if (!$pos) {
return [ $flattened ];
}
$first = substr($flattened, 0, $pos);
$remainder = substr($flattened, $pos);
preg_match_all('#\[([^\]]+)\]#', $remainder, $matches);
return array_merge([ $first], $matches[1]);
}
}
그리고 이것은 사용법이다 :
foreach ($this->domain->getLanguages() as $language) {
$name = new Text("names[$language][name]");
$name->setLabel($t('common.label.category_name') . " ($language)");
$name->addValidator(new MultiDimensionalValidator([
new PresenceOf(['message' => $t('validation.category_name.required')]),
new StringLength([
'max' => 255,
'messageMaximum' => 'validation.category_name.messageMaximum'
])
]));
}
MultiDimensionalValidator 클래스가 여기에 발리로 사용됩니다,하지만 난 정말로 사용하고 싶습니다 폼의 유효성 검사 인스턴스입니다. 폼과 함께 사용자 지정 유효성 검사기를 사용하려면
이 있습니까? 또는 질문을 명확하게하기 위해 유효성 검사반을 볼 수 있습니까? 폼에 와이어를 연결하려는 시도를 추가 할 수 있다면 이상적이며 질문을 다시 열 수 있습니다. – halfer
지금이 부분이 더 명확합니까? – olvlvl
예, 좋다고 생각합니다. 다시 투표하려면 투표를해야합니다 (투표가 몇 번 더 필요하지만 투표를해야합니다). – halfer