Pesquisar

Pesquisar

Experimente

Um campo, todo tipo de resultado. Os nomes das páginas vêm do roteador e não precisam de declaração; os registros vêm das entidades que carregam o atributo abaixo. Cada resultado indica para onde vai, então a barra não tem nada a decidir sobre o que um clique significa.

Provedores

Um provedor é uma família de coisas que podem ser encontradas. Implementar a interface é todo o registro — a autoconfiguração o marca, então um provedor escrito em um aplicativo se junta à busca por existir. Estes são os que respondem aqui, pelo nome que uma consulta se restringe.

  • entity

    Wexample\SymfonySearch\Class\Provider\EntitySearchProvider

  • route

    Wexample\SymfonySearch\Class\Provider\RouteSearchProvider

class CommandSearchProvider extends AbstractSearchProvider
{
    public function provide(SearchQuery $query): iterable
    {
        // yield $this->createResult($reference, $title)->setScore($score);
    }
}

Entidades pesquisáveis

A classe diz que uma entidade é encontrável; suas propriedades dizem sobre o que, cada uma com seu tipo — um título é lido, uma quantidade é um número, um endereço é inteiro ou nada — e o tipo decide tanto o SQL quanto os pontos. Seis das sete funções de pontuação do legado eram aquela lista disfarçada. A sétima raciocinava, e essa nomeia uma classe de pontuação; a entidade cuja resposta depende de quem está perguntando adiciona provider: true e obtém um provedor próprio.

  • contact

    Wexample\SymfonyOrganization\Entity\Contact
    Campos : name (text), email (email)

  • demo_message

    Wexample\SymfonyDesignSystemDemo\Entity\DemoMessage
    Campos : body (text, 5)

  • demo_room

    Wexample\SymfonyDesignSystemDemo\Entity\DemoRoom
    Campos : name (text)

  • demo_user

    Wexample\SymfonyUserDemo\Entity\DemoUser
    Campos : email (email), username (text), firstName (text), lastName (text)

  • organization

    Wexample\SymfonyOrganization\Entity\Organization
    Campos : name (text), vatNumber (text), legalIdentifier (text), email (email)

#[ORM\Entity]
#[Searchable(route: 'app_invoice_show')]
class Invoice extends AbstractEntity
{
    #[SearchText]
    protected string $label;

    #[SearchAmount(points: 40)]
    protected float $priceTotal;
}

A API

Um resultado é uma entidade, então seu endpoint é a coleção dessa entidade e nada mais. O repositório TypeScript gerado a partir da mesma classe PHP a chama sem ser informado de onde está — que é o que o campo acima utiliza.

Parâmetros da consulta

  • search

    O que está sendo procurado. Uma consulta vazia não responde nada ao invés de tudo.

  • context

    De onde a busca é feita, o que decide o que pode responder. Contextos enviados: default, header, form_field

  • type

    Restringe a resposta a um tipo — um nome de entidade ou uma chave de provedor.

  • length

    Quantos resultados. Ausente, a configuração do pacote decide.

/api/search-result/list
curl "/api/search-result/list?search=dupont&context=header&length=5"

Traduções

A barra lê seus próprios rótulos das quatro faces do componente, então um espaço reservado nunca é escrito em marcação. Os títulos dos resultados, por outro lado, vêm do próprio registro ou do nome da rota — traduzir esses ainda não está configurado, e uma página atualmente exibe seu nome de rota humanizado.

# assets/components/search-bar.fr.yml
placeholder: Rechercher...
empty: Aucun résultat.
pending: Recherche en cours...