Laravel - Form Input - Multiple select for a one to many relationship

后端 未结 7 757
情深已故
情深已故 2021-02-01 04:40

One of the requirements in an application that I am building is for a form input which takes in a varying number of items for a single field. For instance, sports that I play ar

7条回答
  •  栀梦
    栀梦 (楼主)
    2021-02-01 04:56

    Laravel 4.2

    @SamMonk gave the best alternative, I followed his example and build the final piece of code

    
    

    In my project I'm going to have many table relationships like this so I wrote an extension to keep it clean. To load it, put it in some configuration file like "app/start/global.php". I've created a file "macros.php" under "app/" directory and included it in the EOF of global.php

    // app/start/global.php
    require app_path().'/macros.php';
    
    // macros.php
    Form::macro("chosen", function($name, $defaults = array(), $selected = array(), $options = array()){
    
        // For empty Input::old($name) session, $selected is an empty string
        if(!$selected) $selected = array();
    
        $opts = array(
            'class' => 'chosen-select',
            'id' => $name,
            'name' => $name . '[]',
            'multiple' => true
        );
        $options = array_merge($opts, $options);
        $attributes = HTML::attributes($options);
    
        // need an empty array to send if all values are unselected
        $ret = '';
        $ret .= '';
        return $ret;
    });
    

    Usage

    List without pre-selected items (create view)

    {{ Form::chosen('places', $places, Input::old('places')) }}
    

    Preselections (edit view)

    {{ Form::chosen('places', $places, $job->places) }}
    

    Complete usage

    {{ Form::chosen('places', $places, $job->places, ['multiple': false, 'title': 'I\'m a selectbox', 'class': 'bootstrap_is_mainstream']) }}
    

提交回复
热议问题