Zoeken
Probeer het
Één veld, elke soort resultaat. Pagina namen komen van de router en hebben geen verklaring nodig; records komen van de entiteiten die het onderstaande attribuut dragen. Elk resultaat geeft aan waar het naartoe gaat, dus de balk hoeft niets te beslissen over wat een klik betekent.
Leveranciers
Een leverancier is één familie van vindbare dingen. Het implementeren van de interface is de hele registratie — autoconfiguratie tagt het, zodat een leverancier geschreven in een applicatie zich bij de zoekopdracht voegt door te bestaan. Dit zijn degenen die hier antwoorden, door de naam waarmee een query zich beperkt.
-
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);
}
}
Doorzoekbare entiteiten
De klasse zegt dat een entiteit vindbaar is; haar eigenschappen zeggen waar dat op is, elk met zijn soort — een titel is leesbaar, een bedrag is een getal, een adres is geheel of niets — en de soort beslist zowel de SQL als de punten. Zes van de zeven scoringfuncties van de legacy waren die lijst in vermomming. De zevende redeneerde, en die noemt een scoringklasse; de entiteit wiens antwoord afhankelijk is van wie vraagt, voegt provider: true toe en krijgt een eigen provider.
-
contact
Wexample\SymfonyOrganization\Entity\Contact
Velden : name (text), email (email) -
demo_message
Wexample\SymfonyDesignSystemDemo\Entity\DemoMessage
Velden : body (text, 5) -
demo_room
Wexample\SymfonyDesignSystemDemo\Entity\DemoRoom
Velden : name (text) -
demo_user
Wexample\SymfonyUserDemo\Entity\DemoUser
Velden : email (email), username (text), firstName (text), lastName (text) -
organization
Wexample\SymfonyOrganization\Entity\Organization
Velden : 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;
}
De API
Een resultaat is een entiteit, dus zijn endpoint is de verzameling van die entiteit en niets anders. De TypeScript-repository die is gegenereerd vanuit dezelfde PHP-klasse roept het aan zonder te worden verteld waar het is — wat het veld hierboven gebruikt.
Queryparameters
- search
Wat er wordt gezocht. Een lege zoekopdracht geeft niets terug in plaats van alles.
- context
Waar de zoekopdracht vandaan komt, wat bepaalt wat het kan antwoorden. Verzonden contexten : default, header, form_field
- type
Beperkt het antwoord tot één soort — een entiteitsnaam of een leverancier sleutel.
- length
Hoeveel resultaten. Afwezig, de bundelconfiguratie beslist.
curl "/api/search-result/list?search=dupont&context=header&length=5"
Vertalingen
De balk leest zijn eigen labels van de vier zijden van de component, dus een placeholder wordt nooit in markup geschreven. Resultaat titels komen daarentegen van het record zelf of van de route naam — het vertalen daarvan is nog niet verbonden, en een pagina toont momenteel zijn route naam gehumaniseerd.
# assets/components/search-bar.fr.yml
placeholder: Rechercher...
empty: Aucun résultat.
pending: Recherche en cours...