Как получить значение Выбранных элементов Select2 при отправке? - PullRequest
0 голосов
/ 07 ноября 2019

Какие параметры я должен установить, чтобы получить значение параметров при отправке формы?

Я использую Select2. Я дал код, который мне нужно настроить, select2, контроллер, который возвращает данные, HTML-код, который отображает элемент.

HTML-код для добавления элемента select2:

<div class="form-group row"><label class="col-lg-2 col-form-label">Keyword</label>
  <div class="col-lg-10">
      <select class="form-control w-50" name="keywords[]"     id="keyword" multiple="multiple">
     </select>
   <span class="form-text m-b-none">One or multiple keywords</span>
 </div>
</div>

Источник данныхявляется вызовом Ajax:

$(document).ready(function() {
    $('#keyword').select2({
        tags: true,
        tokenSeparators: [',', ' '],

   placeholder: 'Select keyword',
    ajax: {
      url: 'https://rankypro.dev/app/json/keywords',
      dataType: 'json',
      delay: 250,
      processResults: function (data) {
        return {
          results:  $.map(data, function (item) {
                return {
                    text: item.name,
                    id: item.id
                }
            })
        };
      },
      cache: true
    }
  });

Контроллер:

public function getKeywords(Request $request){

    $search = $request->search;

    if($search == ''){
        $keywords = Term::orderby('name','asc')
                    ->select('id','name')
                    ->where('taxonomy','keyword')
                    ->limit(5)
                    ->get();
     }else{
        $keywords = Term::orderby('name','asc')->select('id','name')
                        ->where('taxonomy','keyword')
                        ->where('name', 'like', '%' .$search . '%')
                        ->limit(5)
                        ->get();
     }

   $results = array();
        foreach($keywords as $keyword){
            $results[] = array(
                "id"=>$keyword->id,
                "text"=>$keyword->name
            );
        }
   echo json_encode($results);
   exit();
}

Я тестирую с:

public function store(Request $request)
{

    dd($request->keywords);
}

Я получаю следующее:

array:2 [
     0 => "Tools"
     1 => "SEO"
  ]

Мне действительно нужны идентификаторы ключевых слов. Не могли бы вы дать несколько советов, как я могу получить это.

1 Ответ

0 голосов
/ 07 ноября 2019

Я думаю, что это проблема с рендерингом данных. Попробуйте заменить

processResults: function (data) {
        return {
          results:  $.map(data, function (item) {
                return {
                    text: item.name,
                    id: item.id
                }
            })
        };
      }, 

на

processResults: function (data) {

      return {
        results: data.item
      };
    },

select2 для автоматической визуализации имени и имени.

...