양식이 있습니다. 양식은 Collection
이며 대상 요소는 체크 상자와 몇 개의 텍스트 필드가있는 필드 세트입니다. Collection
에 대상 요소로 연결된 필드 셋은 (너무 많은 코드를 방지하기 위해 단순화) 다음과 같습니다zf2/zf3 콜렉션의 필드 세트에서 종속 입력을 검증하는 방법은 무엇입니까?
class AFieldset extends Fieldset implements InputFilterProviderInterface
{
public function __construct(HydratorInterface $hydrator)
{
parent::__construct();
$this->setHydrator($hydrator)
->setObject(new SomeObject());
$this->add([
'type' => Hidden::class,
'name' => 'id',
]);
$this->add([
'type' => Checkbox::class,
'name' => 'selectedInForm',
]);
$this->add([
'type' => Text::class,
'name' => 'textField1',
]);
$this->add([
'type' => Text::class,
'name' => 'textField2',
]);
}
public function getInputFilterSpecification()
{
return [
'selectedInForm' => [
'required' => false,
'continue_if_empty' => true,
'validators' => [
['name' => Callback::class // + options for the validator],
],
],
'id' => [
'requred' => false,
'continue_if_empty' => true,
],
'textField1' => [
'required' => false,
'continue_if_empty' => true,
'validators' => [
['name' => SomeValidator::class],
],
],
'textField2' => [
'required' => true,
'validators' => [
['name' => SomeValidator::class],
],
],
],
}
}
내가 확인하고 싶습니다 textField1
및 selectedInForm
체크 박스 형태로 선택된 경우에 기반 textField2
.
어떻게하면됩니까? 하지만이 같은 selectedInForm
체크 박스에 대한 Callback
유효성 검사기를 사용
I :
'callback' => function($value) {
if ($value) {
$this->get('textField1')->isValid();
// or $this->get('textField1')->getValue() and do some validation with it
}
}
만의 문제는 어떤 이유로, textField1
값의 게시 된 값이 아직 입력에 연결되지 않은 점이다 . textField2
에 대해서도 마찬가지입니다.
답변을 주셔서 감사합니다. 컨트롤러에서 양식의 유효성을 검사 할 때'IfSelectedInFormThanNotEmpty :: isValid()'변수에'$ context' 변수를 가져 오는 방법은 무엇입니까? 나는'Form'의'isValid()'메소드도 다시 작성해야한다고 생각합니다. 이거야? –
오, 물론 아닙니다. 실제로 그것은 zf devs에 대해 이야기 한 문서화되지 않은 기능입니다. 컨텍스트는 이미 있어야합니다. 'Form :: isValid'를 호출하면 ValidatorChain의 isValid가 호출되어 값과 컨텍스트로 정의 된 유효성 검사기를 반복합니다. 따라서이 유효성 검사기를 유효성 검사기 목록에 추가하면됩니다. ' 'validators'=> [[ 'name'=> Your \ Namespace \ IfSelectedInFormThanNotEmpty :: class]]' 답변에서 언급했듯이. 아니면 더 이상의 합병증이 있습니까? – LWjuniOr
흠, 이상하지만,'AbstractValidator'의 생성자에'$ context' 변수가 삽입되지 않습니다. 나는 그것에게 시도를주고, 당신에게 앙갚음을 할 것이다. + 지금 답을 +1했습니다. :-) –