Commit febcec0b7e76290716c25781628f83210eacf965
1 parent
5be26bf2
final version parser upload form and add custom vardumper
Showing
7 changed files
with
67 additions
and
21 deletions
Show diff stats
backend/components/parsers/CsvParser.php
| @@ -6,7 +6,7 @@ | @@ -6,7 +6,7 @@ | ||
| 6 | * Time: 17:00 | 6 | * Time: 17:00 |
| 7 | */ | 7 | */ |
| 8 | 8 | ||
| 9 | -namespace app\components\parsers; | 9 | +namespace backend\components\parsers; |
| 10 | 10 | ||
| 11 | use Yii; | 11 | use Yii; |
| 12 | use yii\base\ErrorException; | 12 | use yii\base\ErrorException; |
| @@ -24,13 +24,17 @@ class CsvParser implements \IteratorAggregate { | @@ -24,13 +24,17 @@ class CsvParser implements \IteratorAggregate { | ||
| 24 | private $out_charset = 'UTF-8'; | 24 | private $out_charset = 'UTF-8'; |
| 25 | /** @var out encoding charset */ | 25 | /** @var out encoding charset */ |
| 26 | private $in_charset; | 26 | private $in_charset; |
| 27 | - /** @var out encoding charset */ | 27 | + /** @var int - first line for parsing */ |
| 28 | private $first_line; | 28 | private $first_line; |
| 29 | 29 | ||
| 30 | - public function setup( $file, $first_line, $hasHeaderRow = TRUE, $delimiter = ';') | 30 | + /** @var int - first column for parsing */ |
| 31 | + private $first_column; | ||
| 32 | + | ||
| 33 | + public function setup( $file, $first_line, $first_column, $hasHeaderRow = TRUE, $delimiter = ';') | ||
| 31 | { | 34 | { |
| 32 | 35 | ||
| 33 | $this->first_line = $first_line; | 36 | $this->first_line = $first_line; |
| 37 | + $this->first_column = $first_column; | ||
| 34 | 38 | ||
| 35 | $this->file = $file; | 39 | $this->file = $file; |
| 36 | 40 | ||
| @@ -106,7 +110,7 @@ class CsvParser implements \IteratorAggregate { | @@ -106,7 +110,7 @@ class CsvParser implements \IteratorAggregate { | ||
| 106 | // @todo add comments | 110 | // @todo add comments |
| 107 | { | 111 | { |
| 108 | $dirt_value_arr = $this->file->fgetcsv( ); | 112 | $dirt_value_arr = $this->file->fgetcsv( ); |
| 109 | - $dirt_value_arr = array_slice( $dirt_value_arr, 2 ); | 113 | + $dirt_value_arr = array_slice( $dirt_value_arr, $this->first_column ); |
| 110 | $clear_arr = Encoder::encodeArray( $this->in_charset, $this->out_charset, $dirt_value_arr ); | 114 | $clear_arr = Encoder::encodeArray( $this->in_charset, $this->out_charset, $dirt_value_arr ); |
| 111 | return $clear_arr; | 115 | return $clear_arr; |
| 112 | 116 |
backend/components/parsers/Encoder.php
backend/components/parsers/ParserHandler.php
| 1 | <?php | 1 | <?php |
| 2 | -namespace app\components\parsers; | 2 | +namespace backend\components\parsers; |
| 3 | + | ||
| 4 | +use Yii; | ||
| 3 | 5 | ||
| 4 | -use app\components\parsers\CsvParser; | ||
| 5 | 6 | ||
| 6 | class ParserHandler { | 7 | class ParserHandler { |
| 7 | 8 | ||
| @@ -15,19 +16,19 @@ class ParserHandler { | @@ -15,19 +16,19 @@ class ParserHandler { | ||
| 15 | private $extension; | 16 | private $extension; |
| 16 | 17 | ||
| 17 | /** @var string - extension of file $filePath */ | 18 | /** @var string - extension of file $filePath */ |
| 18 | - private $first_line; | 19 | + private $options; |
| 19 | 20 | ||
| 20 | /** | 21 | /** |
| 21 | * @param string first line in file for parsing | 22 | * @param string first line in file for parsing |
| 22 | */ | 23 | */ |
| 23 | - public function __construct( $filePath, $first_line ) | 24 | + public function __construct( $filePath, $options ) |
| 24 | { | 25 | { |
| 25 | $this->filePath = $filePath; | 26 | $this->filePath = $filePath; |
| 26 | - $this->first_line = $first_line; | 27 | + $this->options = $options; |
| 27 | 28 | ||
| 28 | try { | 29 | try { |
| 29 | $this->fileObject = new \SplFileObject( $this->filePath , 'r' );; | 30 | $this->fileObject = new \SplFileObject( $this->filePath , 'r' );; |
| 30 | - } catch (ErrorException $e) { | 31 | + } catch (\ErrorException $e) { |
| 31 | Yii::warning("Ошибка открытия файла {$this->filePath}"); | 32 | Yii::warning("Ошибка открытия файла {$this->filePath}"); |
| 32 | } | 33 | } |
| 33 | 34 | ||
| @@ -38,9 +39,12 @@ class ParserHandler { | @@ -38,9 +39,12 @@ class ParserHandler { | ||
| 38 | 39 | ||
| 39 | public function run(){ | 40 | public function run(){ |
| 40 | if ($this->extension = 'csv'){ | 41 | if ($this->extension = 'csv'){ |
| 42 | + $first_line = isset( $this->options->first_line )? $this->options->first_line : 0; | ||
| 43 | + $first_column = isset( $this->options->first_column )? $this->options->first_column : 0; | ||
| 41 | 44 | ||
| 42 | $csvParser = new CsvParser( ); | 45 | $csvParser = new CsvParser( ); |
| 43 | - $csvParser->setup( $this->fileObject, $this->first_line ); | 46 | + $csvParser->setup( $this->fileObject, $first_line, $first_column ); |
| 47 | + | ||
| 44 | return $csvParser->read(); | 48 | return $csvParser->read(); |
| 45 | }; | 49 | }; |
| 46 | } | 50 | } |
backend/controllers/ParserController.php
| @@ -5,16 +5,19 @@ use Yii; | @@ -5,16 +5,19 @@ use Yii; | ||
| 5 | use yii\filters\AccessControl; | 5 | use yii\filters\AccessControl; |
| 6 | use yii\web\Controller; | 6 | use yii\web\Controller; |
| 7 | use yii\filters\VerbFilter; | 7 | use yii\filters\VerbFilter; |
| 8 | -use app\models\UploadFileParsingForm; | 8 | +use backend\models\UploadFileParsingForm; |
| 9 | use yii\web\UploadedFile; | 9 | use yii\web\UploadedFile; |
| 10 | use yii\data\ArrayDataProvider; | 10 | use yii\data\ArrayDataProvider; |
| 11 | -use app\components\parsers\ParserHandler; | 11 | +use backend\components\parsers\ParserHandler; |
| 12 | +use common\components\debug\CustomVarDamp; | ||
| 12 | 13 | ||
| 13 | /** | 14 | /** |
| 14 | - * Site controller | 15 | + * Parser controller |
| 15 | */ | 16 | */ |
| 17 | + | ||
| 16 | class ParserController extends Controller | 18 | class ParserController extends Controller |
| 17 | { | 19 | { |
| 20 | + public $enableCsrfValidation = false; | ||
| 18 | /** | 21 | /** |
| 19 | * @inheritdoc | 22 | * @inheritdoc |
| 20 | */ | 23 | */ |
| @@ -56,14 +59,13 @@ class ParserController extends Controller | @@ -56,14 +59,13 @@ class ParserController extends Controller | ||
| 56 | { | 59 | { |
| 57 | $model = new UploadFileParsingForm(); | 60 | $model = new UploadFileParsingForm(); |
| 58 | 61 | ||
| 59 | - if (Yii::$app->request->isPost) { | 62 | + if ($model->load(Yii::$app->request->post())) { |
| 60 | $model->file = UploadedFile::getInstance($model, 'file'); | 63 | $model->file = UploadedFile::getInstance($model, 'file'); |
| 61 | 64 | ||
| 62 | if ($model->file && $model->validate()) { | 65 | if ($model->file && $model->validate()) { |
| 63 | $filePath = Yii::getAlias('@webroot') . '/uploads/' . $model->file->baseName . '.' . $model->file->extension; | 66 | $filePath = Yii::getAlias('@webroot') . '/uploads/' . $model->file->baseName . '.' . $model->file->extension; |
| 64 | $model->file->saveAs( $filePath ); | 67 | $model->file->saveAs( $filePath ); |
| 65 | - | ||
| 66 | - $parser = new ParserHandler( $filePath, 1 ); | 68 | + $parser = new ParserHandler( $filePath, $model ); |
| 67 | $data = $parser->run(); | 69 | $data = $parser->run(); |
| 68 | 70 | ||
| 69 | if( !is_array($data) ){ | 71 | if( !is_array($data) ){ |
backend/models/UploadFileParsingForm.php
| 1 | <?php | 1 | <?php |
| 2 | -namespace app\models; | 2 | +namespace backend\models; |
| 3 | 3 | ||
| 4 | use yii\base\Model; | 4 | use yii\base\Model; |
| 5 | use yii\web\UploadedFile; | 5 | use yii\web\UploadedFile; |
| 6 | +use Yii; | ||
| 6 | 7 | ||
| 7 | /** | 8 | /** |
| 8 | * UploadForm is the model behind the upload form. | 9 | * UploadForm is the model behind the upload form. |
| @@ -13,6 +14,8 @@ class UploadFileParsingForm extends Model | @@ -13,6 +14,8 @@ class UploadFileParsingForm extends Model | ||
| 13 | * @var UploadedFile file attribute | 14 | * @var UploadedFile file attribute |
| 14 | */ | 15 | */ |
| 15 | public $file; | 16 | public $file; |
| 17 | + public $first_line; | ||
| 18 | + public $first_column; | ||
| 16 | 19 | ||
| 17 | /** | 20 | /** |
| 18 | * @return array the validation rules. | 21 | * @return array the validation rules. |
| @@ -20,7 +23,18 @@ class UploadFileParsingForm extends Model | @@ -20,7 +23,18 @@ class UploadFileParsingForm extends Model | ||
| 20 | public function rules() | 23 | public function rules() |
| 21 | { | 24 | { |
| 22 | return [ | 25 | return [ |
| 23 | - [['file'], 'file', ] //'extensions' => ['csv', 'xml'] ], | 26 | + [['file'], 'file'], //'extensions' => ['csv', 'xml'] ], |
| 27 | + ['first_line', 'integer'], | ||
| 28 | + ['first_column', 'integer'] | ||
| 29 | + ]; | ||
| 30 | + } | ||
| 31 | + | ||
| 32 | + public function attributeLabels() | ||
| 33 | + { | ||
| 34 | + return [ | ||
| 35 | + 'file' => Yii::t('app', 'Источник'), | ||
| 36 | + 'first_line' => Yii::t('app', 'Первая значимая строка'), | ||
| 37 | + 'first_column' => Yii::t('app', 'Первый значимый столбец'), | ||
| 24 | ]; | 38 | ]; |
| 25 | } | 39 | } |
| 26 | } | 40 | } |
| 27 | \ No newline at end of file | 41 | \ No newline at end of file |
backend/views/parser/index.php
| @@ -6,13 +6,15 @@ use yii\helpers\Html; | @@ -6,13 +6,15 @@ use yii\helpers\Html; | ||
| 6 | <div class="row"> | 6 | <div class="row"> |
| 7 | <div class="col-lg-5"> | 7 | <div class="col-lg-5"> |
| 8 | <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> | 8 | <?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?> |
| 9 | + <h3>Загрузка прайсов поставщиков</h3> | ||
| 10 | + | ||
| 9 | <?= $form->field($model, 'first_line') ?> | 11 | <?= $form->field($model, 'first_line') ?> |
| 10 | <?= $form->field($model, 'first_column') ?> | 12 | <?= $form->field($model, 'first_column') ?> |
| 11 | 13 | ||
| 12 | <?= $form->field($model, 'file')->fileInput() ?> | 14 | <?= $form->field($model, 'file')->fileInput() ?> |
| 13 | 15 | ||
| 14 | <div class="form-group"> | 16 | <div class="form-group"> |
| 15 | - <?= Html::submitButton(Yii::t('app', 'Submit'), ['class' => 'btn btn-primary']) ?> | 17 | + <?= Html::submitButton(Yii::t('app', 'Прочитать'), ['class' => 'btn btn-primary']) ?> |
| 16 | </div> | 18 | </div> |
| 17 | 19 | ||
| 18 | <?php ActiveForm::end() ?> | 20 | <?php ActiveForm::end() ?> |
| 1 | +<?php | ||
| 2 | +/** | ||
| 3 | + * Created by PhpStorm. | ||
| 4 | + * User: Cibermag | ||
| 5 | + * Date: 27.08.2015 | ||
| 6 | + * Time: 16:47 | ||
| 7 | + */ | ||
| 8 | +namespace common\components\debug; | ||
| 9 | +use yii\helpers\BaseVarDumper; | ||
| 10 | + | ||
| 11 | +class CustomVarDamp extends BaseVarDumper { | ||
| 12 | + | ||
| 13 | + public static function dumpAndDie($var, $depth = 10, $highlight = false) | ||
| 14 | + { | ||
| 15 | + echo "<pre>"; | ||
| 16 | + echo static::dumpAsString($var, $depth, $highlight); | ||
| 17 | + echo "</pre>"; | ||
| 18 | + die; | ||
| 19 | + } | ||
| 20 | +} | ||
| 0 | \ No newline at end of file | 21 | \ No newline at end of file |