b2pweb / bdf-form-filter-prime
BDF Form 用于创建 Prime 过滤器的辅助库
v1.2.2
2024-02-26 15:08 UTC
Requires
- php: ~7.1 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- b2pweb/bdf-form: ~1.0
- b2pweb/bdf-prime: ~1.0|~2.0
Requires (Dev)
- giggsey/libphonenumber-for-php: ~8.0
- phpunit/phpunit: ~7.0|~8.0|~9.0
- vimeo/psalm: ~4.4
README
BDF Form 用于创建 Prime 过滤器的辅助库。
查看
使用 composer 进行安装
composer require b2pweb/bdf-form-filter-prime
基本使用
要创建一个表单过滤器,只需扩展类 FilterForm
并实现方法 FilterForm::configureFilters()
<?php namespace App\Form; use Bdf\Form\Filter\FilterForm; use Bdf\Form\Filter\FilterFormBuilder; class MyFilters extends FilterForm { public function configureFilters(FilterFormBuilder $builder): void { // Build filter fields // Will add a "foo LIKE xxx%" $builder->searchBegins('foo'); // Will add a "age BETWEEN ? AND ?" $builder->embedded('age', function ($builder) { $builder->integer('0')->setter(); $builder->integer('1')->setter(); })->between(); // Define a custom attribute name and operator $builder->string('foo')->criterion('bar')->operator('>='); } }
现在,您可以提交数据到表单,并将过滤器应用到查询
<?php // Instantiate the form (a container can be use for handle dependency injection) $form = new MyFilters(); // Submit form // Note: if some constraints has been added, call `$form->valid()` and `$form->error()` to check errors $form->submit($request->query->all()); // Get generated criteria $criteria = $form->value(); // Call prime with criteria $list = MyEntity::where($criteria->all())->paginate();
查询助手
有两个助手方法可用于处理 Prime 查询,而不直接使用 Criteria
对象
FilterForm::apply()
将过滤器应用到查询实例FirstForm::query()
将创建带有过滤器的查询
<?php namespace App\Form; use Bdf\Form\Filter\FilterForm; use Bdf\Form\Filter\FilterFormBuilder; class MyFilters extends FilterForm { public function configureFilters(FilterFormBuilder $builder): void { // Set the entity class (note: use $this instead of $builder) $this->setEntity(Person::class); // Define filters $builder->searchBegins('firstName'); $builder->searchBegins('lastName'); $builder->embedded('age', function ($builder) { $builder->integer('0')->setter(); $builder->integer('1')->setter(); })->between(); } }
要使用助手方法,需要在构造函数中注入 Prime 的 ServiceLocator
实例。
<?php // Get the form instance, using a container to inject prime $form = $container->get(MyFilters::class); // Submit form $form->submit($request->query->all()); // Use apply to modify the query $query = Person::builder(); $entities = $form->apply($query)->all(); // Apply filters and execute query // Use directly query() method to create the filter query $entities = $form->query();
MongoDB 使用方法
此库还支持 Prime MongoDB 过滤器。它需要 b2pweb/bdf-prime-mongodb 版本 2.0。使用时,只需使用 Bdf\Form\Filter\MongoFilterForm
代替 Bdf\Form\Filter\FilterForm
,并将 $form->setEntity(...)
更改为 $form->setDocument()
。
<?php namespace App\Form; use Bdf\Form\Filter\MongoFilterForm; use Bdf\Form\Filter\FilterFormBuilder; class MyFilters extends MongoFilterForm { public function configureFilters(FilterFormBuilder $builder): void { // Set the document class (note: use $this instead of $builder) $this->setEntity(Person::class); // Define filters $builder->searchBegins('firstName'); $builder->searchBegins('lastName'); $builder->embedded('age', function ($builder) { $builder->integer('0')->setter(); $builder->integer('1')->setter(); })->between(); } }
使用方法与基本 prime 实体使用相同。