0f83918b
Mihail
change views in e...
|
1
|
YII2 Multiparser
|
41770511
Mihail
edit documentation
|
2
|
==================
|
e9ecd908
Mihail
init commit
|
3
4
5
6
7
8
|
Flexible bunch of parsers for YII 2.
##Requirements##
The Multiparser library has the following requirements:
|
0f83918b
Mihail
change views in e...
|
9
|
- yiisoft/yii2
|
e9ecd908
Mihail
init commit
|
10
|
|
41770511
Mihail
edit documentation
|
11
12
|
##Documentation##
|
0f83918b
Mihail
change views in e...
|
13
|
###1. Общие сведения.###
|
d1faa09b
Mihail
4 and 5 chapter i...
|
14
|
Парсер позволяет прочитать содержимое файла в массив. Парсер поддерживает csv, xml, xls, xlsx, txt расширения. Для каждого расширения необходимо описать правила парсинга в конфигурационном файле (см. п.4). Для одного расширения можно указать несколько сценариев (использование двух сценариев описано в п.3. в вложенном примере к парсеру).
|
0f83918b
Mihail
change views in e...
|
15
|
###2. Установка.###
|
41770511
Mihail
edit documentation
|
16
17
18
|
После копирования пакета в проект необходимо установить парсер как компонент YII. Для этого необходимо составить конфигурационный файл – config.php. Примерами могут служить файл который вложен в пакет или конфигурационный файл, который скомпонован для работы примера (п. 3). Далее в файле common/config/main.php – добавить компонент:
```php
|
d1faa09b
Mihail
4 and 5 chapter i...
|
19
|
$mp_configuration = require("path to config.php");
|
41770511
Mihail
edit documentation
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
return [
…
…
'multiparser'=>[
'class' => 'yii\multiparser\YiiMultiparser',
'configuration' => $mp_configuration,
],
],
];
```
После этого парсер можно запускать следующим образом:
```php
$data = Yii::$app->multiparser->parse( file_path );
```
###3. Установка примера.###
|
d1faa09b
Mihail
4 and 5 chapter i...
|
36
37
38
|
В состав пакета входит развернутый пример парсинга всех типов файлов с разными настройками. Пример написан для использования в YII-advance. Для basic приложения необходимо будет отдельно настроить пространство имен.
Для ознакомления с примером необходимо произвести установку пакета как описано в п.2. В качестве конфигурационного файла необходимо указать файл – examples\config.php.
В состав примера входят:
|
27a75f9c
Mihail
edid documentation
|
39
40
41
42
|
<p>3.1. Контроллер - examples\ParserController.php – его необходимо скопировать в папку с контроллерами бекенда.</p>
<p>3.2. Файлы вью - examples\Views – содержимое необходимо скопировать в папку views бекенда. </p>
<p>3.3. Пользовательская форма выбора файла - examples\UploadFileParsingForm.php – скопировать в модели бекенда.</p>
<p>3.4. Файлы с данными для парсинга - examples\_data – содержимое необходимо скопировать в test\_data проекта.</p>
|
d1faa09b
Mihail
4 and 5 chapter i...
|
43
|
|
41770511
Mihail
edit documentation
|
44
|
###4. Описание конфигурационного файла.###
|
d1faa09b
Mihail
4 and 5 chapter i...
|
45
|
Конфигурационный файл представляет собой описание многомерного массива настроек (пример - examples\config.php).
|
27a75f9c
Mihail
edid documentation
|
46
47
|
<p>4.1. Элементами первого уровня массива указываются расширения файлов, с которыми компонент будет работать. Для каждого расширения определяется массив настроек парсинга данного типа файлов. Пакет поддерживает определение нескольких сценариев (несколько параллельных настроек) для одного типа файлов.</p>
<p>4.2. Сценарии указываются на втором уровне. Так в примере к пакету используются два сценария – template – для файлов приложенных к пакету, и custom – для файлов выбранных пользователем.</p>
|
d1faa09b
Mihail
4 and 5 chapter i...
|
48
|
Также на этом уровне можно определить параметры, которые будут доступны для данного расширения. В примере используется эта возможность для определения колонок выбора соответствия отпарсенных колонок с эталонными колонками (параметр - basic_column). Вызов этого параметра можно осуществить следующим образом:
|
d1faa09b
Mihail
4 and 5 chapter i...
|
49
50
51
|
```php
Yii::$app->multiparser->getConfiguration($file_extension, 'basic_column');
```
|
53582aeb
Mihail
edid documentation
|
52
53
|
<p>4.3. На третьем указываются настройки парсера в виде конфигурационного массива YII.</p>
Данный массив имеет один обязательный элемент с ключем – class, в котором указывается имя парсера, который будет обрабатывать данный тип файлов. Таким образом можно указать свой класс парсера, или использовать классы входящие в пакет, например для csv это класс - `yii\multiparser\CsvParser`.
|
d1faa09b
Mihail
4 and 5 chapter i...
|
54
|
При использовании встроенного класса (или наследуемые от него) в данном массиве можно установить следующие атрибуты в качестве настроек:
|
1d4a020a
Mihail
edid documentation
|
55
56
57
|
<p>4.3.1. `converter_conf – array`. Настройки конвертера. Детально описано в п.5.</p>
<p>4.3.2. `keys – array`. В этом параметре можно назначить имена колонкам файла. Например:</p>
<pre>
|
06153f11
Mihail
edid documentation
|
58
59
60
61
62
63
64
65
66
|
```php
'keys' => [
0 => 'Description',
1 => 'Article',
2 => 'Price',
3 => 'Brand',
4 => 'Count',
]
```
|
1d4a020a
Mihail
edid documentation
|
67
|
</pre>
|
f9c436f1
Mihail
edid 4 chapter of...
|
68
|
При такой настройке результирующий массив будет ассоциативным, где в колонке массива с ключем `'Brand'` – будут значения из четвертой колонки файла.
|
27a75f9c
Mihail
edid documentation
|
69
70
71
72
|
<p>4.3.3. `has_header_row – bolean`. Признак, имеет ли файл заголовок в первой значимой строке, если true - первая значимая строка будет пропущена и не попадет в результирующий массив. По умолчанию – true.</p>
<p>4.3.4. `first_line – integer`. Номер строки с которой начинается парсинг. Если установлен аттрибут has_header_row, тогда следующая строка за данной, будет считаться заголовком и будет пропущена. По умолчанию – 0.</p>
<p>4.3.5. `last_line – integer`. Номер строки по которую будет произведен парсинг. Если = 0, парсинг будет производится до конца файла. По умолчанию – 0.</p>
<p>4.3.6. `min_column_quantity - integer`. Количество заполненных колонок строки начала файла. Если строка имеет не меньше заполненных колонок чем указано в параметре, данная строка считается значимой и с неё начинается парсинг файла. Используется при старте парсинга для определения начала файла. Имеет смысл только при first_line =0. По умолчанию – 5. То есть парсинг начнется с первой строки файла, которая имеет не меньше 5 колонок с данными.</p>
|
f1c8a3ee
Mihail
edid documentation
|
73
|
<p>4.3.7. `empty_lines_quantity - integer`. Количество пустых строк, что бы определить конец файла. Имеет смысл только при first_line =0. По умолчанию – 3. То есть парсинг закончится на строке, после которой встретятся три пустых строки.</p>
|
d1faa09b
Mihail
4 and 5 chapter i...
|
74
75
76
77
78
79
|
###5. Конвертер.###
В состав пакета входит конвертер который позволяет осуществлять преобразования прочитанных данных в процессе парсинга. Таким образом можно получить очищенные и преобразованные данные в результирующем массиве. Простейшим примером, такого преобразования может служит смена кодировки. По умолчанию конвертер входящий в пакет осуществляет смену кодировки с 'windows-1251' в 'UTF-8'.
Конвертер представляет собой отдельный класс с статическими методами конвертации значений. Что бы подключить конвертер к парсеру, необходимо заполнить свойство конфигурационного файла converter_conf.
Данное свойство является конфигурационным массивом с двумя обязательными элементами. Элемент с ключем class, в котором необходимо указать класс используемого конвертера. И Элемент с ключем configuration – массив ключи которого описывают методы преобразования, а значения – имена колонок файла для преобразования.
Конвертер входящий в пакет содержит следующие методы преобразования:
|
27a75f9c
Mihail
edid documentation
|
80
81
82
83
|
<p>5.1. Encode – метод меняет кодировку с 'windows-1251' в 'UTF-8'.</p>
<p>5.2. String – метод очищает строку от специальных символов. А именно, удаляются - `!, @, #, $, %, ^, &, *, (, ), _, +, =, -, ~, ```, ", ', №, %, ;, :, [, ], {, }, *, ?, /, \ , |, ., ',' , <, >, \.`</p>
<p>5.3. Integer – метод преобразует строку в Integer.</p>
<p>5.4. Float – метод преобразует строку в float.</p>
|
d1faa09b
Mihail
4 and 5 chapter i...
|
84
85
86
87
88
89
90
91
92
93
|
Конкретные значения для конвертации есть смысл указывать только если в настройках парсера указаны ключи соответствия (свойство key см. 4.3.2). Иначе необходимо указать в качестве значения – пустой массив, что будет означать применение данного метода для всех колонок файла.
Допустимо указывать колонки для конвертации тремя способами:
```php
'configuration' => ['encode' => [], // - конвертация всех колонок файла методом 'encode'
'string' => ['Description', 'Brand'], - конвертация только двух колонок методом 'string'
'integer' => 'Count' – конвертация колонки 'Count' методом 'integer'
]
```
Расширение конвертера.
Для добавления своих методов преобразования необходимо создать свой класс конвертера. Это можно сделать путем наследования от базового класса конвертера или реализовав интерфейс ConverterInterface. В данном классе реализовать статические методы преобразования.
|
41770511
Mihail
edit documentation
|
|
|