1. Go to this page and download the library: Download elfuvo/yii2-import-wizard library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
elfuvo / yii2-import-wizard example snippets
// in common app config
[
'container'=>[
'definitions' => [
\elfuvo\import\services\ImportServiceInterface::class => [
'class' => \elfuvo\import\services\ImportService::class,
'casters' => [
// there is a custom value casters
// \elfuvo\import\services\BracketValueCaster::class,
]
],
\elfuvo\import\result\ResultImportInterface::class =>
\elfuvo\import\result\FileContinuesResultImport::class,
\elfuvo\import\adapter\AdapterFabricInterface::class => [
'class' => \elfuvo\import\adapter\AdapterFabricDefault::class,
'adapters' => [
\elfuvo\import\adapter\AdapterImportExcel::class,
\elfuvo\import\adapter\AdapterImportCsv::class,
]
],
],
],
];
class DefaultController extend \yii\web\Controller{
public function actions()
{
return [
'upload-file-import' => [ // action with form for uploading import file
'class' => \elfuvo\import\actions\UploadFileAction::class,
...
],
'setup-import' => [ // action with import configuration form
'class' => \elfuvo\import\actions\SetupAction::class,
...
],
'progress' => [ // action for showing current import progress/statistic and errors after import is done
'class' => \elfuvo\import\actions\ProgressAction::class,
],
];
}
}
public function actions()
{
return [
'upload-file-import' => [
'class' => \elfuvo\import\actions\UploadFileAction::class,
'model' => new Review(), // model instance for import
'nextAction' => 'setup-import', // next action name
'progressAction' => 'progress', // name of progress action
],
...
];
}
public function actions()
{
return [
'upload-file-import-map' => [
'class' => UploadFileAction::class,
// model instance with pre-defined attribute values. It will be cloned in import service.
// can be callable function that returns model
'model' => new Review([
'language' => 'ru',
'hidden' => Review::HIDDEN_NO,
]),
'startRowIndex' => 2,
// can be callable function that return array of MapAttribute models
// first argument for that function is first row from import file
'attributeMap' => [
new MapAttribute([
'column' => 'A',
'attribute' => 'b24StationId',
'castTo' => BracketValueCaster::class,
]),
new MapAttribute([
'column' => 'B',
'attribute' => 'title',
'castTo' => MapAttribute::TYPE_STRING,
'identity' => 1,
]),
new MapAttribute([
'column' => 'C',
'attribute' => 'author',
'castTo' => MapAttribute::TYPE_STRING,
]),
new MapAttribute([
'column' => 'D',
'attribute' => 'text',
'castTo' => MapAttribute::TYPE_STRING,
]),
new MapAttribute([
'column' => 'E',
'attribute' => 'rating',
'castTo' => MapAttribute::TYPE_FLOAT,
]),
new MapAttribute([
'column' => 'F',
'attribute' => 'publishAt',
'castTo' => MapAttribute::TYPE_DATETIME,
]),
],
'progressAction' => 'progress',
],
];
}
public function actions()
{
return [
...
'setup-import' => [
'class' => \elfuvo\import\actions\SetupAction::class,
// model instance with pre-defined attribute values. It will be cloned in import service.
/*'model' => new Review([
'hidden' => Review::HIDDEN_NO,
'language' => Yii::$app->language,
'createdBy' => Yii::$app->user->getId(),
])*/
// can be callable function
'model' => function(){
$importModel = new Review([
'hidden' => Review::HIDDEN_NO,
'language' => Yii::$app->language,
'createdBy' => Yii::$app->user->getId(),
]);
// some behaviors do not work in console app (for queued import)
// there we can disable them
$importModel->detachBehavior('LanguageBehavior');
$importModel->detachBehavior('CreatedByBehavior');
return $importModel;
},
'scenario' => Review::SCENARIO_DEFAULT, // scenario of model validation when saving model from import
'previousAction' => 'upload-file-import', // previous action name
'excludeAttributes' => [ // exclude model attributes for building import map
'id',
'language',
'createdBy',
'createdAt',
'updatedAt'
]
],
];
)
public function actions() {
return [
...
'progress' => [
'class' => \elfuvo\import\actions\ProgressAction::class,
'model' => new Review(),
],
];
}