2017-01-27 1 views
3

Ich habe eine Form zu setzen, innerhalb ich mit einigen Optionen eine auswählen, und ich bin mit Laravel kollektiven Formen, es zu bauen, ich habe so etwas wie:Wie benutzerdefinierte Daten-Attribut Option mit Laravel Collective

{!! Form::select('size', $data, $selecteds, ['multiple' => true]) !!} 

Alles läuft gut bis hier, aber jetzt muss ich ein data-section Attribut zu jeder Option setzen, wie kann ich es machen?

Antwort

1

es zu einem vierten Argumente hinzufügen, die ein Array ist:

{!! Form::select('size', $data, $selecteds, ['data-attribute' => 'John Smith', 'multiple' => true]) !!} 
+0

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

+1

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

+1

alles gut !! Ich verstehe, vielen Dank! –

1

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') }}

Verwandte Themen