חיפוש

חיפוש

נסה את זה

שדה אחד, כל סוגי התוצאות. שמות העמודים מגיעים מהנתב ואינם דורשים הצהרה; רשומות מגיעות מהיישויות הנושאות את המאפיין למטה. כל תוצאה נושאת את היעד שלה, כך שהשורה אינה צריכה להחליט מה המשמעות של לחיצה.

ספקים

ספק הוא משפחה אחת של דברים שניתן למצוא. יישום הממשק הוא כל ההרשמה — תיוג אוטומטי מסמן זאת, כך שספק שנכתב ביישום מצטרף לחיפוש על ידי קיום. אלו הם הספקים שעונים כאן, לפי השם שהשאילתה מגבילה את עצמה אליו.

  • 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 וגם את הנקודות. שישה מתוך שבעת פונקציות הניקוד של המורשת היו אותה רשימה בתחפושת. השביעי היה בעל היגיון, וזה אחד שנקרא כיתת ניקוד; הישות whose answer depends on who is asking מוסיפה 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

תוצאה היא ישות, כך שהנקודה שלה היא האוסף של אותה ישות ושום דבר נוסף. מאגר ה-TypeScript שנוצר מאותה מחלקת PHP קורא לה מבלי שיגידו לו היכן היא — מה שהשדה למעלה משתמש בו.

פרמטרי שאילתה

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