1

InputFilterAwareInterface와 InputFilterProviderInterface의 차이점을 설명 할 수 있습니까? 두 가지 모두 InputFilter를 얻으려는 목적과 동일한 목적을 갖고있는 것처럼 보입니다. 그러나 나는 똑같을 수는 없다는 것을 알고 있습니다 ... 언제 전화를 받습니까?ZF2의 InputFilterAwareInterface와 InputFilterProviderInterface의 차이

감사합니다.

답변

1

두 인터페이스가 다른 목적으로 존재합니다. InputFilterAwareInterface은 구현 클래스가 setInputFilter()getInputFilter() 메서드를 사용하여 InputFilter 인스턴스를 받아 들여 반환 할 것을 보장합니다. 한편, InputFilterProviderInterface은 구현 된 클래스가 다양한 입력 팩토리에서 인수로 사용할 준비가 된 필터 스펙 (구성 배열)을 리턴하는 getInputFilterSpecification() 메소드를 가질 것임을 보장합니다.

예 : 당신이 볼 수 있듯이

if ($fieldset === $this && $fieldset instanceof InputFilterProviderInterface) { 
    foreach ($fieldset->getInputFilterSpecification() as $name => $spec) { 
     $input = $inputFactory->createInput($spec); 
     $inputFilter->add($input, $name); 
    } 
} 

, Form 클래스 입력을 생성하고 구현하는 클래스의 getInputFilterSpecification() 방법 ($ FIELDSET INT이 경우에 의해 반환되는 주어진 사양을 사용하여 관련 필터를 결합 : 코드 조각 아래 Zend\Form\Form.php 클래스에서 온). 특색

젠드 프레임 워크 (2)를 사용

또한 일반적으로 사용되는 인터페이스의 특성을 많이 제공합니다. 예를 들어 InputFilterInterface의 경우 InputFilterAwareTrait입니다. 당신이 상상할 수 있듯이

$myClass->setInputFilter($AnInputFilterInstance); 
$myClass->getInputFilter(); // Returns an inputfilter instance. 

가 어떤 특성이 존재하지 : 이것은 당신이 PHP가> = 이제 어디서나 코드에서 5.4

namespace MyNamespace; 

use Zend\InputFilter\InputFilterInterface; 

MyClass implements InputFilterInterface { 

    // Here is the trait which provides set and getInputFilter methods 
    // with a protected $inputFilter attribute to all MyClass instances. 

    use \Zend\InputFilter\InputFilterAwareTrait; 

    // Your other methods. 
    ... 
} 

을, 당신이 할 수있는 경우에 당신은 쉽게 그 인터페이스를 구현할 수 있습니다 의미 InputFilterProviderInterface는 책임이 유효한 구성 사양 만 반환하기 때문에 발생합니다. InputFilterInterface에서 강제되는 것과 같은 인스턴스 또는 클래스 속성은 처리하지 않습니다.