[Practical BEAR.Sunday] Ray.WebFormModule(Aura.Filter v2) 맞춤형 버전 제작

10587 단어 AuraBEAR.Sunday
BEAR.Sunday 형식에서 Aura.Filter(v2.x)의 사용자 정의 규칙을 사용하여 검증한 예를 소개한다.
Ray.WebFormModule 형식 검증
Ray.WebFormModule에 입력한 필드의 검증 사용Aura.Filter(v2.x).구체적으로 아래 그림에서 보듯이 사용SubjectFilter류.
  • 서식 추상류(※ 검증과 관련된 곳의 발췌문)

  • SubjectFilter는 각 필드의 규칙 정의를 통해 요소 컬렉션을 검증합니다.원소 집합은 수조나 대상으로 대상이라고 부른다.
  • Aura.Filter v2.x 매뉴얼 "SubjectFilter"
  • 사용자 정의 유효성 검사를 형식으로 하려면 SubjectFilter에 이 설정을 추가합니다.설정할 수 있는 곳은 창 클래스의 설정기에서 정의한 FilterFactory 클래스입니다.
    사용자 정의 검증의 실현
    아래의 예를 들어 고려하다.
  • 「(商品の注文操作時に)商品の在庫があるかどうか」
  • 를 확인합니다.
  • 주문업무 규격 충족 여부 확인(상품 재고 있음)
  • 여러 필드를 뛰어넘는 검증商品ID数量 두 항목
  • 샘플 코드의 Giithub은 여기 있습니다 kumamidori/ExampleSpecForm.
    업무 규범
    // 商品在庫有り仕様
    class InStockItemSpecification implements SpecificationInterface
    {
        public function isSatisfiedBy($order)
        {
            // 実際にはここでDB検索を呼び出して $order の在庫があるかをチェック
            return false;
        }
    }
    
    AuraFilter 구성
  • 발리 데이터(사용 업무 규격)
  • class ValidateInStockItem implements ValidateInterface
    {
        /**
         * @Inject
         */
        private $spec;
    
        public function __construct(InStockItemSpecification $spec)
        {
            $this->spec = $spec;
        }
    
        public function __invoke($subject, $field)
        {
            // 実際にはここでフォーム要素群($subject)からバリデーションに必要な値セット($order)へと変換
            $order = $subject;
    
            return $this->spec->isSatisfiedBy($order);
        }
    }
    
  • ロケータファクトリ (Locator Factories) 설정(공급자)
  • 규칙의 플랜트 설정을 사용자화합니다.FilterFactory 구조기에서 포지셔닝 문자로 전달한다.
    class FilterFactoryProvider implements ProviderInterface
    {
        private $validateFactories;
    
        /**
         * @Inject
         */
        public function __construct(
            ValidateInStockItem $validateInStockItem
        )
        {
            $this->validateFactories = [
                'app.in-stock-item' => function () use ($validateInStockItem) {
                    return $validateInStockItem;
                },
            ];
        }
    
        public function get()
        {
            return (new FilterFactory($this->validateFactories));
        }
    }
    
    ※ 여기에 설정된 규칙 명칭은 전 세계라는 점(이름 공간과 같은 그룹이 필요한지)이 궁금하다.라이브러리에 추가된 규칙 이름과 구별할 수 있는 app. 접두사를 추가했습니다.
    ※ 설정된 곳은 プロバイダー(Provider)의 구조기이기 때문에 설정지식을 이해하기 어려운 과제가 있습니다(이에 대해서는 별편 보도에서 개선을 별도로 고려했습니다).
    창 옆
    정해진 규칙만 사용한다.
    class ItemSelectForm extends AbstractForm
    {
        use InStockItemFilterInject;
    
        /**
         * {@inheritdoc}
         */
        public function init()
        {
            $this->setField('item_id');
            $this->setField('quantity');
     
            $this->filter->validate('quantity')->is('app.in-stock-item');
            $this->filter->useFieldMessage('item_id', '選択された商品は在庫切れとなっております。');
        }
    }
    
    모듈 제한 사항
  • Filter Factory를 공급업체에 종속
  •         $this->bind(FilterFactory::class)->toProvider(FilterFactoryProvider::class);
            $this->bind(FormInterface::class)->annotatedWith('app.itemSelectForm')->to(ItemSelectForm::class);
            $this->bind(InStockItemSpecification::class);
            $this->bind(ValidateInStockItem::class);
    
    보태다
  • 사용자 정의 규칙 기능을 사용하고 사용자 인터페이스의 검증이라면 Aura를 사용합니다.Filter 매뉴얼에 기재된 표준 기능만으로 제공하는 경우도 많다.표준 기능도 필수와 옵션을 구분할 수 있다.
  • 이상은 한 사례다.BEAR에서도 양식 라이브러리를 자유롭게 선택할 수 있습니다(참조 기사:
    BEAR.선데이와 ZF2Form을 이용한 풀 레이어링 방법 by zingoo )
  • 관련 모듈
  • satomif/ExtraAuraFilterModule
  • 이것은 설정 파일만 통해 사용자 정의 검증 설정을 하는 모듈입니다.제한이 있기 때문에 사용자 측에서 설정에서 대상을 생성하기 때문에 DI 디스크를 사용할 때 사용할 수 없습니다.
  • kumamidori/DiAuraFilterModule
  • DI 기판을 사용해야 하는 수요에 대응하기 위해 DI 주사기를 설치하는 모듈에 사용한다.소개문은 여기.입니다.
    관련 링크
  • BEAR.Sunday 형식-Qita
  • Aura.Filter 벽장을 사용한 맞춤형 발리byshin1x1-Qita
  • 좋은 웹페이지 즐겨찾기