Недавно мне пришлось сделать то же самое. Изучив класс FormBuilder для написания собственной маркировки, я обнаружил, что метод select() на самом деле имеет недокументированный пятый параметр для атрибутов опции:
Form::select('size', $data, $selecteds, ['multiple' => true], $optionAttributes)
Индекс должен соответствовать значению опции, например:
$optionAttributes = [
'S' => [
'data-title' => 'Small',
'data-surcharge' => '0',
],
'M' => [
'data-title' => 'Medium',
'data-surcharge' => '5',
],
'L' => [
'data-title' => 'Large',
'data-surcharge' => '10',
],
];
В итоге я написал марку, которая генерирует этот массив на основе коллекции, а затем использует метод select() по умолчанию. Что-то такое:
\Form::macro('locationSelect', function ($name, $value = null, $attributes = []) {
// Get all locations from the DB
$locations = \App\Location::all();
// Make an id=>title Array for the <option>s
$list = $locations->pluck('title', 'id')->toArray();
// Generate all data-attributes per option
$optionAttributes = [];
foreach ($locations as $location) {
$optionAttributes[$location->id] = [
'data-icon' => $location->icon,
'data-something' => $location->some_attribute,
];
}
// Use default select() method of the FormBuilder
return $this->select($name, $list, $value, $attributes, $optionAttributes);
});
Очень удобно.
{{ Form::locationSelect('location_id') }}
person
J-F
schedule
04.09.2017