backsystem/autocomplete

为Symfony提供的自动完成功能

安装次数: 111

依赖项: 0

建议者: 0

安全性: 0

星标: 0

关注者: 0

分支: 0

开放问题: 0

类型:symfony-bundle

v1.0.6 2024-07-03 08:31 UTC

This package is auto-updated.

Last update: 2024-10-03 09:10:39 UTC


README

信息

此Symfony包是基于Symfony UX Autocomplete创建的。后者满足其他需求,可能不会像Symfony UX Autocomplete那样适合所有人。

安装

首先,使用以下命令安装包

composer require backsystem/autocomplete

接下来,通过在config/routes/autocomplete.yaml中创建以下文件来配置包

autocomplete:
    resource: '@AutocompleteBundle/config/routes.yaml'
    prefix: /api/search # You can choose the prefix you want

示例

<?php

namespace App\Api;

use App\Entity\Member;
use App\Repository\MemberRepository;
use BackSystem\Autocomplete\AbstractApi;
use Doctrine\ORM\EntityRepository;
use Doctrine\ORM\QueryBuilder;

/**
 * @template-extends AbstractApi<User>
 */
class UserApi extends AbstractApi {

    public function getEntityClass(): string {
        return User::class;
    }

    public function getUrl(): string {
        return '/users';
    }

    public function createFilteredQueryBuilder(EntityRepository $repository, string $query): QueryBuilder {
        return $repository->createQueryBuilder('user')
            ->andWhere('CONCAT(user.id, user.firstName, user.lastName, user.firstName, user.email) LIKE :search')
            ->setParameter('search', '%' . str_replace(' ', '', $query) . '%');
    }

    public function isValid(EntityRepository $repository, mixed $id): ?object {
        return $repository->createQueryBuilder('user')
            ->andWhere('user.id = :id')
            ->setParameter('id', $id)
            ->getQuery()
            ->getOneOrNullResult();
    }

    public function getValue($entity): string {
        return (string) $entity->getId();
    }

    public function getLabel($entity): string {
        return sprintf('<b>%s</b><span> - </span><i>%s</i><br><small>%s</small>', str_pad($entity->getId(), 5, '0', STR_PAD_LEFT), $entity->getFullName(), $entity->getEmail());
    }

    public function getTitle($entity): string {
        return $entity->getFullName(); // Optional method, try with and without! :)
    }

}
<?php

namespace App\Form;

use App\Api\UserApi;
use App\Entity\Post;
use BackSystem\Autocomplete\Type\AutocompleteType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class PostType extends AbstractType {

    public function buildForm(FormBuilderInterface $builder, array $options): void {
        $builder->add('title', TextType::class, [
            'label' => 'Amazing title',
        ])->add('user', AutocompleteType::class, [
            'class' => UserApi::class,
            'placeholder' => 'Choose an user',
        ]);
    }

    public function configureOptions(OptionsResolver $resolver): void {
        $resolver->setDefaults([
            'data_class' => Post::class,
        ]);
    }

}