[Practical BEAR.Sunday] Ray.WebFormModule(Aura.Filter v2) 맞춤형 버전 제작
10587 단어 AuraBEAR.Sunday
Aura.Filter(v2.x)
의 사용자 정의 규칙을 사용하여 검증한 예를 소개한다.Ray.WebFormModule 형식 검증
Ray.WebFormModule에 입력한 필드의 검증 사용Aura.Filter(v2.x).구체적으로 아래 그림에서 보듯이 사용
SubjectFilter
류.SubjectFilter는 각 필드의 규칙 정의를 통해 요소 컬렉션을 검증합니다.원소 집합은 수조나 대상으로 대상이라고 부른다.
FilterFactory
클래스입니다.사용자 정의 검증의 실현
아래의 예를 들어 고려하다.
「(商品の注文操作時に)商品の在庫があるかどうか」
商品ID
및 数量
두 항목업무 규범
// 商品在庫有り仕様
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', '選択された商品は在庫切れとなっております。');
}
}
모듈 제한 사항 $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);
보태다BEAR.선데이와 ZF2Form을 이용한 풀 레이어링 방법 by zingoo )
관련 링크
Reference
이 문제에 관하여([Practical BEAR.Sunday] Ray.WebFormModule(Aura.Filter v2) 맞춤형 버전 제작), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kumamidori/items/7ca139b7103f2b2c3aa3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)