Передача нескольких элементов из поля выбора не работает в laravel - PullRequest
1 голос
/ 29 мая 2020

В моем проекте laravel я показываю окно выбора, которое содержит различные клиники, каждая клиника c имеет api_key и id. Я хочу передать идентификатор и api_key контроллеру Laravel при отправке формы. Но теперь я получаю только api_key .ID не получает.

Ниже приведен мой код на странице просмотра

<form method="post"  action="{{ route('viewcode') }}" name="cliniclist" id="cliniclist" enctype="multipart/form-data" novalidate>
{{ csrf_field() }}
<select class="selectpicker" data-style="btn-info btn-fill btn-block" id="clinic_id" name="clinic_id" key="clinic_key">
         @foreach($clinics as$clinic)
            <option value="{!! $clinic->api_key !!}" id="{!! $clinic->api_key !!}" clinic_key="{!! $clinic->clinicID !!}">{!! $clinic->clinicName !!}</option>
         @endforeach
 </select>

<div class="col-xs-12 col-sm-12 col-md-12 form-action">
      <button type="submit" class="btn btn-fill btn-info">Submit</button>
          <a href="" class="btn btn-default btn-fill">Cancel</a> 
 </div>

</form>

Здесь, в моем коде, я печатаю clini c id в clinic_key атрибут

Ниже приведен мой код в контроллере

public function store(Request $request)
{
    echo $request->clinic_key;
    die();
    $clinic_api_key = $request->clinic_id;
    return view('locations.viewcode')->with(['clinic_api' => $clinic_api_key]);
}

В чем проблема

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Тег опции может иметь только одно значение. Поскольку вы пытаетесь получить там 2 значения, вы можете соединить их с некоторыми специальными символами, такими как дефис «-» или, возможно, двоеточие «:». Таким образом, вы можете позже разделить их этим специальным символом в нашем контроллере.

<select class="selectpicker" data-style="btn-info btn-fill btn-block" id="clinic_id" name="clinic_id" key="clinic_key">
@foreach($clinics as$clinic)
<option value="{!! $clinic->api_key.'-'.$clinic->id !!}" id="{!! $clinic->api_key !!}" clinic_key="{!! $clinic->clinicID !!}">{!! $clinic->clinicName !!}</option>
@endforeach
 </select>

А затем в вашем контроллере просто получите значение поля clinic_id и разделите их.

public function store(Request $request)
    {
        //make sure clinic_id and id does not contain '-' in their values
        $clinic_data = explode('-',$request->clinic_id);
        $clinic_id = $clinic_data[1];
        $clinic_api_key = $clinic_data[0];
        return view('locations.viewcode',compact('clinic_id','clinic_api_key'));

    }

чтобы приведенный выше код работал. пожалуйста, убедитесь, что ваши данные api_key и id из базы данных не содержат "-" или будут повреждены. В этом случае используйте другой разделитель.

1 голос
/ 29 мая 2020

Вы можете сделать это просто как

<option value="{!! $clinic->api_key.'-'.$clinic->id !!}">{!! $clinic->clinicName !!}</option>

А внутри контроллера сделать это так

$split = explode("-",$request->clinic_id);
$clinic_api_key = $split[0];
$clinic_id = $split[1];

Обновленный ответ. С маленьким jquery вы можете сделать так.

<form method="post"  action="{{ route('viewcode') }}" name="cliniclist" id="cliniclist" enctype="multipart/form-data" novalidate>
            {{ csrf_field() }}
            <select class="selectpicker" data-style="btn-info btn-fill btn-block" id="clinic_id" name="clinic_id" key="clinic_key">
                @foreach($clinics as$clinic)
                    <option value="{!! $clinic->api_key !!}" data-clinic_id="{!! $clinic->clinicID !!}">{!! $clinic->clinicName !!}</option>
                @endforeach
            </select>
            <input type="hidden" name="api_key" id="api_key">
            <input type="hidden" name="id" id="id">

            <div class="col-xs-12 col-sm-12 col-md-12 form-action">
                <button type="submit" class="btn btn-fill btn-info">Submit</button>
                <a href="" class="btn btn-default btn-fill">Cancel</a>
            </div>

        </form>

Jquery Код, как вы можете видеть, я поместил два скрытых поля в вашу форму, поэтому вы получите доступ эти два входа внутри вашего контроллера, кроме выбора имени.

$(document).on('change','#clinic_id',function(){
            var clinic_api_key = $('option:selected',this).val();
            var clinic_id = $('option:selected',this).data('clinic_id');

            $("#api_key").val(clinic_api_key);
            $("#id").val(clinic_id);
        });

Теперь в контроллере

$request->api_key;
$request->id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...