검색

검색

해보기

하나의 필드, 모든 종류의 결과. 페이지 이름은 라우터에서 가져오며 별도의 선언이 필요하지 않습니다; 레코드는 아래의 속성을 가진 엔티티에서 가져옵니다. 각 결과는 이동할 위치를 포함하므로, 바는 클릭의 의미에 대해 결정할 필요가 없습니다.

제공자

제공자는 찾을 수 있는 것들의 한 가족입니다. 인터페이스를 구현하는 것은 전체 등록입니다 — 자동 구성 태그가 이를 표시하므로, 애플리케이션에 작성된 제공자가 존재함으로써 검색에 참여합니다. 여기에서 응답하는 것은 쿼리가 제한하는 이름에 따라 다릅니다.

  • 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과 포인트를 모두 결정합니다. 레거시의 일곱 가지 점수 함수 중 여섯 가지는 변장을 한 그 목록이었습니다. 일곱 번째는 논리적이었고, 그 하나가 점수 클래스를 명명합니다; 응답이 누가 요청하는지에 따라 달라지는 엔티티는 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

    응답을 한 종류로 제한합니다 — 엔티티 이름 또는 제공자 키.

  • length

    결과 수. 없으면, 번들 구성에 의해 결정됩니다.

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

번역

바는 구성 요소의 네 면에서 자신의 레이블을 읽으므로, 플레이스홀더는 마크업에 작성되지 않습니다. 반면, 결과 제목은 레코드 자체나 경로 이름에서 옵니다 — 그것들을 번역하는 것은 아직 연결되어 있지 않으며, 현재 페이지는 그 경로 이름을 인간화하여 표시합니다.

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