Zoeken

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.

/api/search-result/list
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...