b2pweb/bdf-form-filter-prime

BDF Form 用于创建 Prime 过滤器的辅助库

v1.2.2 2024-02-26 15:08 UTC

This package is auto-updated.

Last update: 2024-09-05 15:02:32 UTC


README

BDF Form 用于创建 Prime 过滤器的辅助库。

build codecov Packagist Version Total Downloads Type Coverage

查看

使用 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 实体使用相同。