Commit d3cf66475275fb6fb337d9d7e1476c07fd3efd74
1 parent
e9b63b6a
add multiply price funktional in Converter
Showing
9 changed files
with
116 additions
and
22 deletions
Show diff stats
backend/controllers/ParserController.php
| @@ -266,13 +266,15 @@ class ParserController extends BaseController | @@ -266,13 +266,15 @@ class ParserController extends BaseController | ||
| 266 | foreach (glob(Yii::getAlias('@temp_upload') . '/*.csv') as $server_file) { | 266 | foreach (glob(Yii::getAlias('@temp_upload') . '/*.csv') as $server_file) { |
| 267 | 267 | ||
| 268 | $file_name = basename($server_file,".csv"); | 268 | $file_name = basename($server_file,".csv"); |
| 269 | - // rename( $server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv'); | ||
| 270 | copy( $server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv' ); | 269 | copy( $server_file, Yii::getAlias('@auto_upload') . '/' . $file_name . '.csv' ); |
| 271 | 270 | ||
| 272 | } | 271 | } |
| 272 | + | ||
| 273 | Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' ); | 273 | Yii::$app->session->setFlash( 'server-files', 'Файл успешно загружен' ); |
| 274 | $this->redirect('server-files'); | 274 | $this->redirect('server-files'); |
| 275 | 275 | ||
| 276 | +// $csv = new \console\controllers\ParserController( 'parse-csv', $this->module ); | ||
| 277 | +// $csv->actionParseCsv(); | ||
| 276 | } | 278 | } |
| 277 | 279 | ||
| 278 | 280 |
backend/models/Importers.php
| @@ -2,6 +2,7 @@ | @@ -2,6 +2,7 @@ | ||
| 2 | 2 | ||
| 3 | namespace backend\models; | 3 | namespace backend\models; |
| 4 | 4 | ||
| 5 | +use common\components\CustomVarDamp; | ||
| 5 | use Yii; | 6 | use Yii; |
| 6 | use backend\components\base\BaseActiveRecord; | 7 | use backend\components\base\BaseActiveRecord; |
| 7 | 8 | ||
| @@ -93,6 +94,7 @@ class Importers extends BaseActiveRecord | @@ -93,6 +94,7 @@ class Importers extends BaseActiveRecord | ||
| 93 | { | 94 | { |
| 94 | // возьмем только поля описанные в fields() - там как раз наши настройки парсера | 95 | // возьмем только поля описанные в fields() - там как раз наши настройки парсера |
| 95 | $arr = $this->toArray(); | 96 | $arr = $this->toArray(); |
| 97 | + | ||
| 96 | // отсортируем по ключам с учетом преобразования в число | 98 | // отсортируем по ключам с учетом преобразования в число |
| 97 | asort($arr, SORT_NUMERIC); | 99 | asort($arr, SORT_NUMERIC); |
| 98 | // уберем нулевые колонки | 100 | // уберем нулевые колонки |
| @@ -101,10 +103,21 @@ class Importers extends BaseActiveRecord | @@ -101,10 +103,21 @@ class Importers extends BaseActiveRecord | ||
| 101 | }); | 103 | }); |
| 102 | // нам нужны именно ключи | 104 | // нам нужны именно ключи |
| 103 | $arr = array_keys($arr); | 105 | $arr = array_keys($arr); |
| 106 | + | ||
| 104 | return $arr; | 107 | return $arr; |
| 108 | + } | ||
| 109 | + | ||
| 110 | + | ||
| 111 | + public function getMultiply () | ||
| 112 | + { | ||
| 113 | + $arr['sign'] = $this->PARSER_FIELD_SIGN; | ||
| 114 | + $arr['multiplier'] = $this->PARSER_FIELD_MULTIPLIER; | ||
| 105 | 115 | ||
| 116 | + return $arr; | ||
| 106 | } | 117 | } |
| 107 | 118 | ||
| 119 | + | ||
| 120 | + | ||
| 108 | public function fields() | 121 | public function fields() |
| 109 | { | 122 | { |
| 110 | return [ | 123 | return [ |
| @@ -119,5 +132,4 @@ class Importers extends BaseActiveRecord | @@ -119,5 +132,4 @@ class Importers extends BaseActiveRecord | ||
| 119 | 132 | ||
| 120 | } | 133 | } |
| 121 | 134 | ||
| 122 | - | ||
| 123 | } | 135 | } |
common/components/parsers/CustomConverter.php
| @@ -11,6 +11,9 @@ class CustomConverter extends Converter { | @@ -11,6 +11,9 @@ class CustomConverter extends Converter { | ||
| 11 | * @param $key_array - ключи для вложенного массива | 11 | * @param $key_array - ключи для вложенного массива |
| 12 | * @return array - таблица с проименованными колонками | 12 | * @return array - таблица с проименованными колонками |
| 13 | */ | 13 | */ |
| 14 | + public static $sign; | ||
| 15 | + public static $multiplier; | ||
| 16 | + | ||
| 14 | public static function convertToAssocArray ( array $value_arr, array $key_array, $key_prefix = '' ) | 17 | public static function convertToAssocArray ( array $value_arr, array $key_array, $key_prefix = '' ) |
| 15 | { | 18 | { |
| 16 | // очистка служебного префикса в массиве заголовков | 19 | // очистка служебного префикса в массиве заголовков |
| @@ -82,6 +85,40 @@ class CustomConverter extends Converter { | @@ -82,6 +85,40 @@ class CustomConverter extends Converter { | ||
| 82 | return $row; | 85 | return $row; |
| 83 | } | 86 | } |
| 84 | 87 | ||
| 88 | + public function ConvertToMultiply ( array $row ) | ||
| 89 | + { | ||
| 90 | + $PRICE = $row[ 'PRICE' ]; | ||
| 91 | + $sign = self::$sign; | ||
| 92 | + $multiplier = self::$multiplier; | ||
| 93 | + //CustomVarDamp::dumpAndDie(self); | ||
| 94 | + if (isset($sign)) { | ||
| 95 | + if ($sign == '+') { | ||
| 96 | + if ($multiplier > 0) { | ||
| 97 | + $PRICE += $multiplier; | ||
| 98 | + } | ||
| 99 | + } | ||
| 100 | + else if ($sign == '-') { | ||
| 101 | + if ($multiplier > 0) { | ||
| 102 | + $PRICE -= $multiplier; | ||
| 103 | + } | ||
| 104 | + } | ||
| 105 | + else if ($sign == '*') { | ||
| 106 | + if ($multiplier > 0) { | ||
| 107 | + $PRICE *= $multiplier; | ||
| 108 | + } | ||
| 109 | + } | ||
| 110 | + else if ($sign == '/') { | ||
| 111 | + if ($multiplier > 0) { | ||
| 112 | + $PRICE /= $multiplier; | ||
| 113 | + } | ||
| 114 | + } | ||
| 115 | + } | ||
| 116 | + | ||
| 117 | + $row[ 'PRICE' ] = $PRICE; | ||
| 118 | + | ||
| 119 | + return $row; | ||
| 120 | + | ||
| 121 | + } | ||
| 85 | 122 | ||
| 86 | 123 | ||
| 87 | } | 124 | } |
| 88 | \ No newline at end of file | 125 | \ No newline at end of file |
common/components/parsers/CustomCsvParser.php
| @@ -25,10 +25,12 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { | @@ -25,10 +25,12 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { | ||
| 25 | if ($this->hasHeaderRow) { | 25 | if ($this->hasHeaderRow) { |
| 26 | // если у файла есть заголовок, то в результате имеем ассоциативный массив | 26 | // если у файла есть заголовок, то в результате имеем ассоциативный массив |
| 27 | $this->converter_conf['hasKey'] = 1; | 27 | $this->converter_conf['hasKey'] = 1; |
| 28 | + | ||
| 28 | } | 29 | } |
| 29 | 30 | ||
| 30 | } | 31 | } |
| 31 | - | 32 | +// $this->converter = \Yii::createObject( $this->converter_conf ); |
| 33 | +// CustomVarDamp::dumpAndDie($this->converter); | ||
| 32 | } | 34 | } |
| 33 | 35 | ||
| 34 | /** | 36 | /** |
| @@ -38,7 +40,7 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { | @@ -38,7 +40,7 @@ class CustomCsvParser extends \yii\multiparser\CsvParser { | ||
| 38 | */ | 40 | */ |
| 39 | protected function convert($arr) | 41 | protected function convert($arr) |
| 40 | { | 42 | { |
| 41 | - $arr = \Yii::$app->multiparser->convertByConfiguration($arr, $this->converter_conf); | 43 | + $arr = \Yii::$app->multiparser->convertByConfiguration( $arr, $this->converter_conf ); |
| 42 | 44 | ||
| 43 | return $arr; | 45 | return $arr; |
| 44 | 46 |
common/components/parsers/config.php
| @@ -4,18 +4,21 @@ | @@ -4,18 +4,21 @@ | ||
| 4 | ['web' => | 4 | ['web' => |
| 5 | ['class' => 'common\components\parsers\CustomCsvParser', | 5 | ['class' => 'common\components\parsers\CustomCsvParser', |
| 6 | 'auto_detect_first_line' => true, | 6 | 'auto_detect_first_line' => true, |
| 7 | - 'converter_conf' => ['class' => ' common\components\parsers\CustomConverter', | 7 | + 'converter_conf' => [ |
| 8 | + //'class' => ' common\components\parsers\CustomConverter', // @todo переделать на подключаемый behavior | ||
| 8 | 'configuration' => ["string" => 'DESCR'],] | 9 | 'configuration' => ["string" => 'DESCR'],] |
| 9 | ], | 10 | ], |
| 10 | 'console' => | 11 | 'console' => |
| 11 | ['class' => 'common\components\parsers\CustomCsvParser', | 12 | ['class' => 'common\components\parsers\CustomCsvParser', |
| 12 | 'auto_detect_first_line' => true, | 13 | 'auto_detect_first_line' => true, |
| 13 | 'hasHeaderRow' => true, | 14 | 'hasHeaderRow' => true, |
| 14 | - 'converter_conf' => ['class' => ' common\components\parsers\CustomConverter', | 15 | + 'converter_conf' => [ |
| 16 | + //'class' => ' common\components\parsers\CustomConverter', | ||
| 15 | 'hasKey' => 1, | 17 | 'hasKey' => 1, |
| 16 | 'configuration' => ["string" => 'DESCR', | 18 | 'configuration' => ["string" => 'DESCR', |
| 17 | "float" => 'PRICE', | 19 | "float" => 'PRICE', |
| 18 | "integer" => ['BOX','ADD_BOX'], | 20 | "integer" => ['BOX','ADD_BOX'], |
| 21 | + "multiply" => [], | ||
| 19 | "details" => [] // @todo сделать отдельно конфигурирование валидации | 22 | "details" => [] // @todo сделать отдельно конфигурирование валидации |
| 20 | 23 | ||
| 21 | ] | 24 | ] |
| @@ -36,7 +39,8 @@ | @@ -36,7 +39,8 @@ | ||
| 36 | ['console' => | 39 | ['console' => |
| 37 | ['class' => 'yii\multiparser\XmlParser', | 40 | ['class' => 'yii\multiparser\XmlParser', |
| 38 | 'node' => 'Товар', | 41 | 'node' => 'Товар', |
| 39 | - 'converter_conf' => ['class' => ' common\components\parsers\CustomConverter', | 42 | + 'converter_conf' => [ |
| 43 | + //'class' => ' common\components\parsers\CustomConverter', | ||
| 40 | 'hasKey' => 1, | 44 | 'hasKey' => 1, |
| 41 | 'configuration' => ["details" => [] | 45 | 'configuration' => ["details" => [] |
| 42 | ],], | 46 | ],], |
console/controllers/ParserController.php
| 1 | <?php | 1 | <?php |
| 2 | namespace console\controllers; | 2 | namespace console\controllers; |
| 3 | 3 | ||
| 4 | +use common\components\CustomVarDamp; | ||
| 4 | use yii\console\Controller; | 5 | use yii\console\Controller; |
| 5 | use yii\helpers\Console; | 6 | use yii\helpers\Console; |
| 6 | use common\components\PriceWriter; | 7 | use common\components\PriceWriter; |
| @@ -10,7 +11,6 @@ use yii\base\ErrorException; | @@ -10,7 +11,6 @@ use yii\base\ErrorException; | ||
| 10 | 11 | ||
| 11 | class ParserController extends Controller | 12 | class ParserController extends Controller |
| 12 | { | 13 | { |
| 13 | - | ||
| 14 | public function actionParseCsv() | 14 | public function actionParseCsv() |
| 15 | { | 15 | { |
| 16 | \Yii::info('Начало загрузки файлов прайсов csv', 'parser'); | 16 | \Yii::info('Начало загрузки файлов прайсов csv', 'parser'); |
| @@ -18,11 +18,22 @@ class ParserController extends Controller | @@ -18,11 +18,22 @@ class ParserController extends Controller | ||
| 18 | $file_name = basename($file_path, ".csv"); | 18 | $file_name = basename($file_path, ".csv"); |
| 19 | \Yii::info("Обработка файла - $file_path", 'parser'); | 19 | \Yii::info("Обработка файла - $file_path", 'parser'); |
| 20 | $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id; | 20 | $importer_id = ImportersFiles::findOne(['id' => $file_name])->importer_id; |
| 21 | - $keys = Importers::findOne(['id' => $importer_id])->keys; | 21 | + $current_importer = Importers::findOne(['id' => $importer_id]); |
| 22 | + $keys = $current_importer->keys; | ||
| 23 | + $mult_array = $current_importer->multiply; | ||
| 24 | + | ||
| 25 | + // получим настройки ценообразования и передадим их отдельно в конвертер | ||
| 26 | + $sign = ''; | ||
| 27 | + $multiplier = ''; | ||
| 28 | + extract( $mult_array ); | ||
| 29 | + | ||
| 22 | 30 | ||
| 23 | $config = ['record_id' => $file_name, | 31 | $config = ['record_id' => $file_name, |
| 24 | 'importer_id' => $importer_id, | 32 | 'importer_id' => $importer_id, |
| 25 | 'parser_config' => ['keys' => $keys, | 33 | 'parser_config' => ['keys' => $keys, |
| 34 | + 'converter_conf' => | ||
| 35 | + ['sign' => $sign, | ||
| 36 | + 'multiplier' => $multiplier], | ||
| 26 | 'mode' => 'console'] | 37 | 'mode' => 'console'] |
| 27 | ]; | 38 | ]; |
| 28 | if ($this->parseFileConsole($file_path, $config)) { | 39 | if ($this->parseFileConsole($file_path, $config)) { |
| @@ -48,7 +59,7 @@ class ParserController extends Controller | @@ -48,7 +59,7 @@ class ParserController extends Controller | ||
| 48 | $parser_config = $configuration['parser_config']; | 59 | $parser_config = $configuration['parser_config']; |
| 49 | } | 60 | } |
| 50 | $data = \Yii::$app->multiparser->parse( $file_path, $parser_config ); | 61 | $data = \Yii::$app->multiparser->parse( $file_path, $parser_config ); |
| 51 | - if (! $data) { | 62 | + if ( ! $data ) { |
| 52 | // @todo переделать, что бы ошибка автоматически останавливала сценарий | 63 | // @todo переделать, что бы ошибка автоматически останавливала сценарий |
| 53 | return false; | 64 | return false; |
| 54 | } | 65 | } |
vendor/yiisoft/multiparser/Converter.php
| @@ -9,6 +9,7 @@ | @@ -9,6 +9,7 @@ | ||
| 9 | namespace yii\multiparser; | 9 | namespace yii\multiparser; |
| 10 | use common\components\CustomVarDamp; | 10 | use common\components\CustomVarDamp; |
| 11 | use yii\base\Behavior; | 11 | use yii\base\Behavior; |
| 12 | +use yii\base\ErrorException; | ||
| 12 | 13 | ||
| 13 | // класс который содержит преобразователи значений (фильтры) используемые при парсинге | 14 | // класс который содержит преобразователи значений (фильтры) используемые при парсинге |
| 14 | class Converter extends Behavior | 15 | class Converter extends Behavior |
| @@ -98,8 +99,23 @@ class Converter extends Behavior | @@ -98,8 +99,23 @@ class Converter extends Behavior | ||
| 98 | */ | 99 | */ |
| 99 | public static function convertByConfiguration( $arr, $configuration ) | 100 | public static function convertByConfiguration( $arr, $configuration ) |
| 100 | { | 101 | { |
| 101 | - $hasKey = isset( $configuration['hasKey'] ); | ||
| 102 | - foreach ( $configuration['configuration'] as $key => $value ) { | 102 | + if( $hasKey = isset( $configuration['hasKey'] ) ) |
| 103 | + unset( $configuration['hasKey'] ); | ||
| 104 | + | ||
| 105 | + if ( isset( $configuration['configuration'] ) ) { | ||
| 106 | + $arr_config = $configuration['configuration']; | ||
| 107 | + unset( $configuration['configuration'] ); | ||
| 108 | + } else{ | ||
| 109 | + throw new ErrorException('Не указан обязательный параметр конфигурационного файла - converter_conf[configuration]'); | ||
| 110 | + } | ||
| 111 | + | ||
| 112 | + // проставим аттрибуды из конфига{}{} | ||
| 113 | + foreach ($configuration as $key_setting => $setting) { | ||
| 114 | + if( property_exists( static::class, $key_setting ) ) | ||
| 115 | + static::$$key_setting = $setting; | ||
| 116 | + } | ||
| 117 | + | ||
| 118 | + foreach ( $arr_config as $key => $value ) { | ||
| 103 | if ( $hasKey ){ | 119 | if ( $hasKey ){ |
| 104 | // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности | 120 | // у нас ассоциативный массив, и мы можем конвертировать каждое значение в отдельности |
| 105 | if ( is_array( $value ) ) { | 121 | if ( is_array( $value ) ) { |
vendor/yiisoft/multiparser/CsvParser.php
| @@ -50,6 +50,8 @@ class CsvParser implements ParserInterface | @@ -50,6 +50,8 @@ class CsvParser implements ParserInterface | ||
| 50 | public $converter_conf = []; | 50 | public $converter_conf = []; |
| 51 | /** @var array - конвертер созданный по конфигурации */ | 51 | /** @var array - конвертер созданный по конфигурации */ |
| 52 | public $converter = NULL; | 52 | public $converter = NULL; |
| 53 | + /** @var int - текущая строка */ | ||
| 54 | + private $current_line = 0; | ||
| 53 | 55 | ||
| 54 | 56 | ||
| 55 | /** | 57 | /** |
| @@ -95,8 +97,9 @@ class CsvParser implements ParserInterface | @@ -95,8 +97,9 @@ class CsvParser implements ParserInterface | ||
| 95 | { | 97 | { |
| 96 | 98 | ||
| 97 | $finish = false; | 99 | $finish = false; |
| 98 | - | ||
| 99 | while (!$finish) { | 100 | while (!$finish) { |
| 101 | + $this->current_line ++; | ||
| 102 | + | ||
| 100 | $j = 0; | 103 | $j = 0; |
| 101 | $row = $this->file->fgetcsv();; | 104 | $row = $this->file->fgetcsv();; |
| 102 | if ($row === false) { | 105 | if ($row === false) { |
| @@ -104,6 +107,7 @@ class CsvParser implements ParserInterface | @@ -104,6 +107,7 @@ class CsvParser implements ParserInterface | ||
| 104 | } | 107 | } |
| 105 | 108 | ||
| 106 | for ($i = 1; $i <= count($row); $i++) { | 109 | for ($i = 1; $i <= count($row); $i++) { |
| 110 | + // CustomVarDamp::dump($row[$i]); | ||
| 107 | 111 | ||
| 108 | if ($row[$i - 1] <> '') { | 112 | if ($row[$i - 1] <> '') { |
| 109 | $j++; | 113 | $j++; |
| @@ -114,6 +118,9 @@ class CsvParser implements ParserInterface | @@ -114,6 +118,9 @@ class CsvParser implements ParserInterface | ||
| 114 | } | 118 | } |
| 115 | } | 119 | } |
| 116 | } | 120 | } |
| 121 | + die(); | ||
| 122 | + // $this->current_line --; | ||
| 123 | + $this->file->seek( $this->current_line ); | ||
| 117 | } | 124 | } |
| 118 | 125 | ||
| 119 | /** | 126 | /** |
| @@ -125,12 +132,11 @@ class CsvParser implements ParserInterface | @@ -125,12 +132,11 @@ class CsvParser implements ParserInterface | ||
| 125 | 132 | ||
| 126 | $return = []; | 133 | $return = []; |
| 127 | 134 | ||
| 128 | - $current_line = 0; | ||
| 129 | // будем считать количество пустых строк подряд - при трех подряд - считаем что это конец файла и выходим | 135 | // будем считать количество пустых строк подряд - при трех подряд - считаем что это конец файла и выходим |
| 130 | $empty_lines = 0; | 136 | $empty_lines = 0; |
| 131 | while ( $empty_lines < 3 ) { | 137 | while ( $empty_lines < 3 ) { |
| 132 | // прочтем строку из файла. Если там есть значения - то в ней массив, иначе - false | 138 | // прочтем строку из файла. Если там есть значения - то в ней массив, иначе - false |
| 133 | - $row = $this->readRow( $current_line ); | 139 | + $row = $this->readRow( ); |
| 134 | 140 | ||
| 135 | if ($row === false) { | 141 | if ($row === false) { |
| 136 | //счетчик пустых строк | 142 | //счетчик пустых строк |
| @@ -138,7 +144,7 @@ class CsvParser implements ParserInterface | @@ -138,7 +144,7 @@ class CsvParser implements ParserInterface | ||
| 138 | continue; | 144 | continue; |
| 139 | } | 145 | } |
| 140 | // строка не пустая, имеем прочитанный массив значений | 146 | // строка не пустая, имеем прочитанный массив значений |
| 141 | - $current_line++; | 147 | + $this->current_line++; |
| 142 | if ($this->hasHeaderRow) { | 148 | if ($this->hasHeaderRow) { |
| 143 | // в файле есть заголовок, но он еще не назначен, назначим | 149 | // в файле есть заголовок, но он еще не назначен, назначим |
| 144 | if ($this->keys === NULL) { | 150 | if ($this->keys === NULL) { |
| @@ -146,7 +152,7 @@ class CsvParser implements ParserInterface | @@ -146,7 +152,7 @@ class CsvParser implements ParserInterface | ||
| 146 | } | 152 | } |
| 147 | } | 153 | } |
| 148 | // если у нас установлен лимит, при его достижении прекращаем парсинг | 154 | // если у нас установлен лимит, при его достижении прекращаем парсинг |
| 149 | - if (($this->last_line) && ($current_line > $this->last_line)) { | 155 | + if (($this->last_line) && ($this->current_line > $this->last_line)) { |
| 150 | break; | 156 | break; |
| 151 | } | 157 | } |
| 152 | // обнуляем счетчик, так как считаюся пустые строки ПОДРЯД | 158 | // обнуляем счетчик, так как считаюся пустые строки ПОДРЯД |
| @@ -168,16 +174,19 @@ class CsvParser implements ParserInterface | @@ -168,16 +174,19 @@ class CsvParser implements ParserInterface | ||
| 168 | /** | 174 | /** |
| 169 | * @return array - одномерный массив результата парсинга строки | 175 | * @return array - одномерный массив результата парсинга строки |
| 170 | */ | 176 | */ |
| 171 | - protected function readRow( $current_line ) | 177 | + protected function readRow( ) |
| 172 | { | 178 | { |
| 173 | $row = $this->file->fgetcsv(); | 179 | $row = $this->file->fgetcsv(); |
| 180 | + // уберем нулевые колонки | ||
| 181 | + $row = array_filter($row, function($val){ | ||
| 182 | + return $val <> ''; | ||
| 183 | + }); | ||
| 174 | if (is_array($row)) { | 184 | if (is_array($row)) { |
| 175 | // если есть заголовок, то перед конвертацией его нужно назначить | 185 | // если есть заголовок, то перед конвертацией его нужно назначить |
| 176 | if ($this->hasHeaderRow && $this->keys !== NULL) { | 186 | if ($this->hasHeaderRow && $this->keys !== NULL) { |
| 177 | 187 | ||
| 178 | if (count($this->keys) !== count($row)) { | 188 | if (count($this->keys) !== count($row)) { |
| 179 | -// | ||
| 180 | - throw new \ErrorException("Ошибка парсинга файла в строке # {$current_line}. Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными", 0, 1, $this->file->getBasename(), $current_line); | 189 | + throw new \ErrorException("Ошибка парсинга файла в строке # {$this->current_line}. Не соответсвие числа ключевых колонок (заголовка) - числу колонок с данными", 0, 1, $this->file->getBasename(), $this->current_line); |
| 181 | } | 190 | } |
| 182 | 191 | ||
| 183 | $row = array_combine($this->keys, $row); | 192 | $row = array_combine($this->keys, $row); |
vendor/yiisoft/multiparser/YiiParserHandler.php
| @@ -9,6 +9,8 @@ | @@ -9,6 +9,8 @@ | ||
| 9 | namespace yii\multiparser; | 9 | namespace yii\multiparser; |
| 10 | 10 | ||
| 11 | 11 | ||
| 12 | +use common\components\CustomVarDamp; | ||
| 13 | + | ||
| 12 | class YiiParserHandler extends ParserHandler{ | 14 | class YiiParserHandler extends ParserHandler{ |
| 13 | 15 | ||
| 14 | 16 | ||
| @@ -46,8 +48,7 @@ class YiiParserHandler extends ParserHandler{ | @@ -46,8 +48,7 @@ class YiiParserHandler extends ParserHandler{ | ||
| 46 | 48 | ||
| 47 | try { | 49 | try { |
| 48 | $this->configuration = \Yii::$app->multiparser->getConfiguration($this->extension, $this->mode); | 50 | $this->configuration = \Yii::$app->multiparser->getConfiguration($this->extension, $this->mode); |
| 49 | - $this->configuration = array_merge($this->configuration, $options); | ||
| 50 | - | 51 | + $this->configuration = array_merge_recursive ($this->configuration, $options); |
| 51 | } catch (\ErrorException $e) { | 52 | } catch (\ErrorException $e) { |
| 52 | echo $e->getMessage(); | 53 | echo $e->getMessage(); |
| 53 | return []; | 54 | return []; |