# Menu

# Tworzenie pozycji menu na podstawie klasy

Niestandardowe elementy menu służą do podłączenia dynamicznie wygenerowanych danych. Przykładem takiego typu sekcji mogą być kategorie.

# Definiowanie niestandardowego typu menu

W pliku konfiguracyjnym Modules/Menu/Config/config.php należy dodać parę "klucz - wartość" wewnątrz custom-menuable-types, gdzie kluczem jest nazwa rodzaju menu.

Wartością może być nazwa klasy, która posiada metodę getItemData() zwracającą dane lub tablica, w której pierwszym elementem jest nazwa klasy, a drugim jej metoda.

// Modules/Menu/Config/config.php

'custom-menuable-types' => [
    'categories' => CategoryService::class,
    // lub 
    'categories' => [CategoryService::class, 'customMethod'],
],

Następnie należy stworzyć klasę, która zwróci odpowiednie dane.

class CategoryService
{
    public function getItemData(array $options = null)
    {
        return CategoryResource::collection(
            Category::all()
        );
    }
}

# Dodatkowe opcje

use Modules\Core\Models\Option;

class CategoryService
{
    public function options(): array
    {
        return [
            Option::number('count'),
            Option::select('order_by', [
                'asc' => 'Ascending',
                'desc' => 'Descending'
            ]),
        ];
    }
}

# Walidacja pól z opcjami

Reguły walidacji dla opcji należy zdefiniować poprzez dodanie publicznej metody rules():

class CategoryService
{
    public function rules(): array
    {
        return [
            'count' => 'integer|min:1',
            'order_by' => 'in:asc,desc|string',
        ];
    }
}