Backpack for Laravel - Загрузить CSV и сохранить как JSON в базе данных

Я успешно настроил Backpack для Laravel для обработки всех операций CRUD для моего приложения, за исключением одного конкретного поля. Мне нужно импортировать CSV, преобразовать его в JSON, а затем сохранить JSON в моей базе данных для последующего отображения в виде таблицы HTML.

Я создал настраиваемое поле в Backpack, которое на самом деле создает поле для загрузки файла, но я не могу понять, как указать его на настраиваемый метод для обработки логики для обработки преобразования и сохранения CSV.

Я просмотрел документацию, но не вижу упоминаний о чем-либо подобном. https://backpackforlaravel.com/docs/3.4/crud-fields#creating-a-custom-field-type

//Placed in the Controller CrudPanel Configuration
$this->crud->addField([
  // CSV to JSON
  'label' => "Specs Table",
  'name' => "specifications_table",
  'type' => 'csv2json', //custom field name
], 'update/create/both');

//Placed in csv2json.blade.php file
<div @include('crud::inc.field_wrapper_attributes') >
  <label>{!! $field['label'] !!}</label>
  <input
      type="file"
      name="{{ $field['name'] }}"
      value="{{ old($field['name']) ? old($field['name']) : (isset($field['value'])     ? $field['value'] : (isset($field['default']) ? $field['default'] : '' )) }}    "
      @include('crud::inc.field_attributes')
  >

  {{-- HINT --}}
     @if (isset($field['hint']))
        <p class="help-block">{!! $field['hint'] !!}</p>
     @endif
</div>

person KayakJosh    schedule 15.05.2019    source источник


Ответы (1)


Если вам нужна дополнительная логика для настраиваемого типа поля, всегда рекомендуется (imho) сделать это внутри модели в качестве средства доступа для этого конкретного атрибута модели.

Возьмем, к примеру, тип поля image: он требует наличия setImageAttribute() аксессор, где выполняется фактическая загрузка и сохранение.

Вы можете добавить к своей модели новый метод:

public function setSpecificationsTableAttribute($value) {
  // read $value
  // convert it to JSON
  // $this->attributes['specifications_table'] = $fileConvertedToJson;
}

Надеюсь, это поможет.

person tabacitu    schedule 17.07.2019