ich vor kurzem die gleiche Sache zu tun hatte. Nachdem die Formbuilder-Klasse Inspektion meiner eigenen marco zu schreiben, fand ich heraus, dass die select() Methode tatsächlich eine nicht dokumentierte fünfte Parameter hat für die Option Attribute:
Form::select('size', $data, $selecteds, ['multiple' => true], $optionAttributes)
Der Index den Wert der Option übereinstimmen müssen, zB:
$optionAttributes = [
'S' => [
'data-title' => 'Small',
'data-surcharge' => '0',
],
'M' => [
'data-title' => 'Medium',
'data-surcharge' => '5',
],
'L' => [
'data-title' => 'Large',
'data-surcharge' => '10',
],
];
So beendet I ein Marco Schreiben up, die diese Anordnung auf einer Sammlung basierend erzeugt und verwendet dann die Standardauswahl() Methode. Etwas wie das:
\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);
});
Sehr bequem.
{{ Form::locationSelect('location_id') }}
aber, dass die Daten-Attribut auf das Auswahl hinzufügen? Ich habe einen anderen Daten-Attribut-Wert für jede Option, das liegt daran, dass ich es in Javascript verwende. –
Es wird ein Attribut zum 'select' Element hinzugefügt. Wenn Sie jeder Option ein Attribut hinzufügen möchten, können Sie ein [benutzerdefiniertes Makro] erstellen (https://laravelcollective.com/docs/5.3/html#custom-macros). Oder Sie können Werte wie "Wert: Daten" hinzufügen und einfach in JS verwenden. Aber in diesem Fall müssen Sie den Wert manuell nach dem Senden des Formulars abrufen. Oder verwenden Sie einfach HTML, um eine Auswahlliste zu erstellen. –
alles gut !! Ich verstehe, vielen Dank! –