Рюкзак для Laravel - Загрузить CSV и сохранить как JSON в базе данных - PullRequest
0 голосов
/ 15 мая 2019

Я успешно настроил 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>

1 Ответ

0 голосов
/ 17 июля 2019

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

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

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

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

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

...