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.
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...