検索

検索

試してみる

1つのフィールド、あらゆる種類の結果。ページ名はルーターから取得され、宣言は不要です。レコードは下に示された属性を持つエンティティから取得されます。各結果はどこに進むかを示しているため、バーはクリックが意味することについて何も決定する必要はありません。

プロバイダー

プロバイダーは見つけられるものの一群です。インターフェースを実装することが全体の登録であり、自動構成によってタグ付けされるため、アプリケーションに記述されたプロバイダーは存在することで検索に参加します。これらは、クエリが制限される名前によってここで応答するものです。

  • 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);
    }
}

検索可能なエンティティ

クラスはエンティティが見つけられることを示し、そのプロパティはそれぞれの種類に基づいて何を示すかを示します — タイトルは読み取り、金額は数字、住所は全体または無であり、種類はSQLとポイントの両方を決定します。レガシーの7つのスコアリング関数のうち6つはそのリストの偽装でした。7番目は推論され、その1つがスコアリングクラスの名前を付けます。誰が尋ねるかによって答えが決まるエンティティは、provider: trueを追加し、自分自身のプロバイダーを取得します。

  • contact

    Wexample\SymfonyOrganization\Entity\Contact
    フィールド : name (text), email (email)

  • demo_message

    Wexample\SymfonyDesignSystemDemo\Entity\DemoMessage
    フィールド : body (text, 5)

  • demo_room

    Wexample\SymfonyDesignSystemDemo\Entity\DemoRoom
    フィールド : name (text)

  • demo_user

    Wexample\SymfonyUserDemo\Entity\DemoUser
    フィールド : email (email), username (text), firstName (text), lastName (text)

  • organization

    Wexample\SymfonyOrganization\Entity\Organization
    フィールド : 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;
}

API

結果はエンティティであり、そのエンドポイントはそのエンティティのコレクションであり、他には何もありません。同じPHPクラスから生成されたTypeScriptリポジトリは、どこにあるかを指示されずに呼び出されます — これは、上記のフィールドが使用しているものです。

クエリパラメーター

  • search

    探しているもの。空のクエリは、すべてではなく何も返しません。

  • context

    検索が行われる場所で、それが何に答えるかを決定します。出荷されたコンテキスト: default, header, form_field

  • type

    回答を1つの種類に制限します — エンティティ名またはプロバイダーキー。

  • length

    結果の数。欠如している場合、バンドルの設定が決定します。

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

翻訳

バーはコンポーネントの4つの面から独自のラベルを読み取るため、プレースホルダーはマークアップには書かれません。一方、結果のタイトルはレコード自体またはルート名から取得されます — それらの翻訳はまだ接続されておらず、現在のページは人間らしく表示されたルート名を示しています。

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