{"id":20112434,"url":"https://github.com/andy87/yii2-file-crafter","last_synced_at":"2025-05-06T11:31:53.017Z","repository":{"id":258694122,"uuid":"869633680","full_name":"andy87/yii2-file-crafter","owner":"andy87","description":null,"archived":false,"fork":false,"pushed_at":"2024-11-04T22:23:29.000Z","size":110,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-04T23:05:17.379Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/andy87.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-10-08T16:13:57.000Z","updated_at":"2024-11-04T22:23:33.000Z","dependencies_parsed_at":"2024-11-04T23:15:36.865Z","dependency_job_id":null,"html_url":"https://github.com/andy87/yii2-file-crafter","commit_stats":null,"previous_names":["andy87/yii2-dnk-file-crafter","andy87/yii2-file-crafter"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-file-crafter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-file-crafter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-file-crafter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/andy87%2Fyii2-file-crafter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/andy87","download_url":"https://codeload.github.com/andy87/yii2-file-crafter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":224501053,"owners_count":17321773,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-13T18:20:14.801Z","updated_at":"2025-05-06T11:31:53.010Z","avatar_url":"https://github.com/andy87.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\n\u003ch1 align=\"center\"\u003eYii2 File Crafter\u003c/h1\u003e\n\nYii2 File Crafter - library for generating a many templates with minimal differences\n\n### Content\n\n- [Setup](#yii2-file-crafter-setup)\n- [Config](#yii2-file-crafter-config)\n- [Using](#yii2-file-crafter-using)\n\n\n___\n\n\u003cspan id=\"yii2-file-crafter-setup\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Setup\n\u003c/h2\u003e\n\n\u003cspan id=\"yii2-migrate-architect-setup-require\"\u003e\u003c/span\u003e\n\u003ch3\u003eRequirements\u003c/h3\u003e \n\n- php \u003e=8.0\n- Yii2\n\n\u003ch3\u003e\n    \u003ca href=\"https://getcomposer.org/download/\"\u003eComposer\u003c/a\u003e\n\u003c/h3\u003e\n\n\u003cspan id=\"yii2-migrate-architect-setup\"\u003e\u003c/span\u003e\n## Add package to project\n\n\u003ch3\u003eUsing console\u003c/h3\u003e\n\u003csmall\u003e\u003ci\u003e(Recommended)\u003c/i\u003e\u003c/small\u003e\n\n- Composer ( global setup )\n```bash\ncomposer require andy87/yii2-file-crafter:dev-master --dev\n````  \n- Composer.phar ( local setup )\n```bash\nphp composer.phar require andy87/yii2-file-crafter:dev-master --dev\n```\n\n\u003cspan id=\"yii2-file-crafter-setup-composer-composer\"\u003e\u003c/span\u003e\n\u003ch3\u003eUsing: file `composer.json`\u003c/h3\u003e\n\nOpen file `composer.json`, in section with key `require` add line:  \n`\"andy87/yii2-file-crafter\": \"dev-master\"`  \n\ndont forget update composer\n```bash\ncomposer update\n```\n\u003cp align=\"center\"\u003e- - - - -\u003c/p\u003e\n\n\n\u003cspan id=\"yii2-file-crafter-config\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Config\n\u003c/h2\u003e\n\nConfig in the configuration file.  \n - basic:`config/(web|web-local|local).php`  \n - advanced:`(frontend|backend)/config/main-local.php`  \n\n\nMinimum config\n```php\n $config['modules']['gii'] = [\n    'class' =\u003e yii\\gii\\Module::class,\n    'generators' =\u003e [\n        'fileCrafter' =\u003e [\n            'class' =\u003e andy87\\yii2\\file_crafter\\Crafter::class,\n            'options' =\u003e [\n                'templates' =\u003e [\n                    'group_name' =\u003e [\n                        // 'template' =\u003e 'path/to/file.php',\n                        'common/services/PascalCaseService' =\u003e '@app/common/services/items/{PascalCase}Service.php',\n                        'template/test/unit/camelCaseService.tpl' =\u003e '@backend/test/unit/{{camelCase}}Service.php',\n                        'templates/view/index.php' =\u003e 'custom/dir/{{snake_case}}/index.php',\n                    ]\n                ]\n            ]\n        ]\n    ],\n];\n```\n\nFull Config with all options\n```php\n $config['modules']['gii'] = [\n    'class' =\u003e yii\\gii\\Module::class,\n    'generators' =\u003e [\n        'fileCrafter' =\u003e [\n            'class' =\u003e andy87\\yii2\\file_crafter\\Crafter::class,\n            'options' =\u003e [\n                'cache' =\u003e [\n                    'dir' =\u003e '@runtime/yii2-file-crafter/cache',\n                    'ext' =\u003e '.tpl'\n                ],\n                'source' =\u003e [\n                    'dir' =\u003e '@runtime/yii2-file-crafter/templates/source',\n                    'ext' =\u003e '.tpl'\n                ],\n                'custom_fields' =\u003e [\n                    'singular' =\u003e 'label - one',\n                    'plural' =\u003e 'label - many',\n               ],\n                'commands' =\u003e [\n                    'php yii gii/model --tableName={{snake_case}} --modelClass={{PascalCase}} --ns=\"common\\models\" --interactive=0' //... \n                ],\n                'eventHandler' =\u003e app\\composents\\behavior\\FileCrafterBehavior::class,\n                'autoCompleteStatus' =\u003e true,\n                'autoCompleteList' =\u003e [\n                    'autocomplete name 1',\n                    'autocomplete name 2',\n                ],\n                'previewStatus' =\u003e true,\n                'canDelete' =\u003e true,\n                'parseDataBase' =\u003e ['autocomplete','fakeCache'],\n                'templates' =\u003e [\n                    'common' =\u003e [\n                        'common/services/PascalCaseService' =\u003e 'app/common/services/items/{[PascalCase]}Service.php',\n                    ],\n                    'backend' =\u003e [\n                        'backend/test/unit/camelCaseService.tpl' =\u003e 'backend/test/unit/{{camelCase}}Service.php',\n                    ],\n                    'frontend' =\u003e [\n                        'frontend/view/index.php' =\u003e 'app/frontend/view/{{snake_case}}/index.php',\n                    ],\n                    'all' =\u003e [\n                        'common/services/PascalCaseService' =\u003e 'app/common/services/items/{PascalCase}Service.php',\n                        'backend/test/unit/camelCaseService.tpl' =\u003e 'backend/test/unit/{{camelCase}}Service.php',\n                        'frontend/view/index.php' =\u003e 'app/frontend/view/{{snake_case}}/index.php',\n                    ]\n                ],\n            ]\n        ]\n    ],\n];\n```\n\n\u003cspan id=\"yii2-file-crafter-using\"\u003e\u003c/span\u003e\n\u003ch2\u003e\n    Using\n\u003c/h2\u003e  \n\n- [Marks](#yii2-file-crafter-using-Marks)  \n- [Cache](#yii2-file-crafter-using-Cache)  \n- [Source](#yii2-file-crafter-using-Source)  \n- [Custom Fields](#yii2-file-crafter-using-CustomFields)  \n- [Autocomplete status](#yii2-file-crafter-autoCompleteStatus)\n- [Autocomplete list](#yii2-file-crafter-autoCompleteList)\n- [Preview status](#yii2-file-crafter-previewStatus)\n- [Can delete](#yii2-file-crafter-canDelete)\n- [Parse data base](#yii2-file-crafter-parseDataBase)\n- [Commands](#yii2-file-crafter-using-Commands)  \n- [Events](#yii2-file-crafter-using-Events)  \n- [Templates](#yii2-file-crafter-using-Templates)  \n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-Marks\"\u003e\u003c/span\u003e  \n\u003ch2 align=\"center\"\u003eMarks\u003c/h2\u003e  \n\nModule use marks for replace variables in templates.  \n - `{{PascalCase}}` - PascalCase by schema name  \n - `{{camelCase}}` - camelCase by schema name  \n - `{{snake_case}}` - snake_case by schema name  \n - `{{kebab-case}}` - kebab-case by schema name  \n - `{{UPPERCASE}}` - UPPERCASE by schema name  \n - `{{lowercase}}` - lowercase by schema name\n - `{{[key]}}` - custom key from property `custom_fields` on `config` ( see [Custom Fields](#yii2-file-crafter-using-Custom) )\n\n#### Example\nfor schema name `Product Items` replace marks:\n- `{{PascalCase}}` - `ProductItems`  \n- `{{camelCase}}` - `productItems`  \n- `{{snake_case}}` - `product_items`  \n- `{{kebab-case}}` - `product-items`  \n- `{{UPPERCASE}}` - `PRODUCT ITEMS`  \n- `{{lowercase}}` - `product items`  \n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-Cache\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Cache\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e  \n\nConfiguration for the cache folder with schema data.\n\n- `dir` - path to the cache directory with schema data  \n- `ext` - extension of the cache file  \n\nDefault configuration:\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'cache' =\u003e [\n                    'dir' =\u003e '@runtime/yii2-file-crafter/cache',\n                    'ext' =\u003e '.json'\n                ],\n                // ...\n            ],\n        ],\n    ]\n];\n```\n\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-Source\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Source\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e  \n\nConfiguration for the source folder with templates files.\n\n- `dir` - path to the directory with the templates files source for generation  \n- `ext` - extension of the templates file  \n\nDefault configuration:\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'source' =\u003e [\n                    'dir' =\u003e '@runtime/yii2-file-crafter/templates/source',\n                    'ext' =\u003e '.tpl'\n                ],\n                // ...\n            ],\n        ],\n    ]\n];\n```\n\n--- \n\u003cspan id=\"yii2-file-crafter-using-CustomFields\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Templates\n    \u003csmall style=\"color: #900; font-size:9px\"\u003e(required)\u003c/small\u003e\n\u003c/h2\u003e\n\nArray with groups of templates for use on generate files.  \n```php\n[\n    ['group1'] =\u003e [\n        'template1' =\u003e 'path/from/project/root/to/resultFile.tpl',\n        'template2.tpl' =\u003e 'path/from/project/root/to/resultFile.php',\n        // ...\n    ],\n    ['group2'] =\u003e [\n        'template1.php' =\u003e '@path/alias/to/resultFile.tpl',\n        '@alias/to/template' =\u003e 'path/from/project/root/to/resultFile.php',\n        // ...\n    ],\n]\n```\nThe source path may contain:  \n - some `@` alias ( `source['dir']` - default container )  \n - `ext` for generate any file type ( `.php` default )  \n - some `{{variable}}` ( see [Marks](#yii2-file-crafter-using-Marks) )  \n\nFile source-template will be searched in the `source` folder.  \nSource folder path can be set in the configuration file. ( see [Source](#yii2-file-crafter-using-Source) )  \n\nThe resultFile path may contain:  \n - some `@` alias ( `@app/` - default prefix )  \n - `ext` for generate any file type ( `.php` default )  \n - some `{{variable}}` ( see [Marks](#yii2-file-crafter-using-Marks) )  \n\nContent of the templates file rendered with the `View` method `renderFile`  \nAnd prepared with the `$replaceList` array contains all marks. ( see [Marks](#yii2-file-crafter-using-Marks) )  \nAnd also passed to the render method:  \n - `$schema` - schema object  \n - `$generator` - self generator object\n\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'templates' =\u003e [\n                    'all' =\u003e [\n                        '@backend/dir/by/alias/camelCaseService.tpl' =\u003e '@backend/generate/by/alias/{{camelCase}}Service.php',\n                        'dir/on/source/dir/generate_file' =\u003e 'custom/dir/on/source/dir/{{snake_case}}/generate_file.tpl',\n                    ],\n                ],\n                // ...\n            ],\n        ],\n    ]\n];\n```\n\n---\n\n\u003cspan id=\"yii2-file-crafter-using-CustomFields\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Custom Fields\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e  \n\nArray with custom fields for use custom variables in templates.  \nUsing on template key wrapped in square brackets: `{{%key%}}`    \nExample: `{{key_one}}`, `{{key_two}}`...  \n\nExample simple config  \n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'custom_fields' =\u003e [\n                    'singular' =\u003e 'one',\n                    'plural' =\u003e 'many',\n                ],\n                // ...\n            ],\n        ],\n    ]\n];\n```\nwith template:\n```php\nValue - ONE = {{singular}}\nValue - MANY = ({{plural}})\n```\n\u003cp\u003e ___ \u003c/p\u003e\n\nSchema 1: `Product Items`  \nField `one` = `!!product!!`  \nField `many` = `\u003e\u003e\u003e products \u003c\u003c\u003c`  \n\n...generate...\n\nResult: `app/frontend/views/info--product_items.php`\n```php\nValue - ONE = !!product!!\nValue - MANY = (\u003e\u003e\u003e products \u003c\u003c\u003c)\n```\n\n\u003cp\u003e ___ \u003c/p\u003e\n\nSchema 2: `Category Group`  \nField `label one` = `--category--`   \nField `label many` = `+++categories+++`  \n\n...generate...\n\nResult: `app/frontend/views/info--category_group.php`\n```php\nValue - ONE = --category--\nValue - MANY = (+++categories+++)\n```\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-autoCompleteStatus\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003eAutocomplete status\u003c/h2\u003e\n\nKey `autoCompleteStatus` contain status for autocomplete field `Schema name` in the form 200 populated values.\n  \nVariants: `true` or `false`(default)  \n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'autoCompleteStatus' =\u003e true,\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-autoCompleteList\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Autocomplete list\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e\n\nKey `autoCompleteList` contain list of autocomplete field `Schema name` in the form self custom list.\n  \nType: `array`  \n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'autoCompleteList' =\u003e [\n                    'Product Items',\n                    'Category Group',\n                    'User Profile',\n                    // ...\n                ],\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-previewStatus\"\u003e\u003c/span\u003e\n    \u003ch2 align=\"center\"\u003ePreview status\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e \n\u003c/h2\u003e\n\nKey `previewStatus` contain status for preview file content on hover icon in the form.\n  \nVariants: `true`(default) or `false`  \n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'previewStatus' =\u003e true,\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-canDelete\"\u003e\u003c/span\u003e\n    \u003ch2 align=\"center\"\u003eCan delete\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e \n\u003c/h2\u003e\n\nKey `canDelete` contain status for delete schema from the form.\n\nVariants: `true`(default) or `false`\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'canDelete' =\u003e true,\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n--- \n\n\u003cspan id=\"yii2-file-crafter-using-parseDataBase\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Parse data base\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e\n\nKey `parseDataBase` contain list of target for extend schema name list from database.\n\nVariants: `array` with values: \n- `autocomplete`\n- `fakeCache`\n\nDefault `empty`;\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'parseDataBase' =\u003e ['autocomplete','fakeCache'],\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n\u003cspan id=\"yii2-file-crafter-using-Commands\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Commands\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e\n\nKey `commands` contain list `cli` command for call before generate any file.  \ncommand make use of the `{{variable}}` in the command string ( see [Marks](#yii2-file-crafter-using-Marks) )\n\nExample: generate gii model for table name from schema name before generate fileContent\n\nDefault `empty`;\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n            'fileCrafter' =\u003e [\n            'options' =\u003e [\n                // ... \n                'commands' =\u003e [\n                    'php yii gii/model --tableName={{snake_case}} --modelClass={{PascalCase}} --ns=\"common\\models\"  --interactive=0 --overwrite=1' // ... \n                ],\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n\u003cspan id=\"yii2-file-crafter-using-Events\"\u003e\u003c/span\u003e\n\u003ch2 align=\"center\"\u003e\n    Events\n    \u003csmall style=\"color: #009; font-size:9px\"\u003e(optional)\u003c/small\u003e\n\u003c/h2\u003e\n\nMake use of the `eventHandlers` key to add a behavior to the module.\n\nExample: add behavior `FileCrafterBehavior` to the module\n\nDefault `null`;\n```php\n$config['modules']['gii'] = [\n    'class' =\u003e Module::class,\n        'generators' =\u003e [\n        'options' =\u003e [\n                // ... \n                'eventHandlers' =\u003e FileCrafterBehavior::class,\n                // ...\n            ],\n        ],\n    ],\n];\n```\n\n\n#### Before init\n`CrafterEvent::BEFORE_INIT` before init module\n\n#### After init\n`CrafterEvent::AFTER_INIT` after init module\n\nCome events has special properties...\n\n#### Before generate\n`CrafterEventGenerate::BEFORE` before generate all files\n\n```php\n//class FileCrafterBehavior extends Behavior\npublic function beforeGenerate(CrafterEventGenerate $crafterEventGenerate): void {\n    Yii::info([ 'Generated files', [\n        $crafterEventGenerate-\u003efiles // empty (call before generate)\n    ]]); \n}\n```\n\n#### Before command\n`CrafterEventCommand::BEFORE` before run cli command\n\n```php\n//class FileCrafterBehavior extends Behavior\npublic function beforeCommand(CrafterEventCommand $crafterEventCommand): void {\n       Yii::error([ __METHOD__, [\n        $crafterEventCommand-\u003ecmd-\u003eexec,\n        $crafterEventCommand-\u003ecmd-\u003eoutput, // empty (call before exec command)\n        $crafterEventCommand-\u003ecmd-\u003ereplaceList\n    ]]);\n}\n```\n\n##### Cmd  \n`\\andy87\\yii2\\file_crafter\\components\\models\\Dto`  \n - string **$exec** - _exec command_\n - string **$output** - _exec output_\n - array **$replaceList** - _replace map_\n\n#### After command\n`CrafterEventCommand::AFTER` after run cli command\n\n```php\n//class FileCrafterBehavior extends Behavior\npublic function afterCommand(CrafterEventCommand $crafterEventCommand): void {\n    Yii::error([ __METHOD__, [\n        $crafterEventCommand-\u003ecmd-\u003eexec,\n        $crafterEventCommand-\u003ecmd-\u003eoutput, // output command\n        $crafterEventCommand-\u003ecmd-\u003ereplaceList\n    ]]);\n}\n```\n\n#### Before render\n`CrafterEventRender::BEFORE` before render file\n\n```php\n//class FileCrafterBehavior extends Behavior\npublic function beforeRender(CrafterEventRender $crafterEventRender): void {\n    Yii::error([ __METHOD__, [\n        $crafterEventRender-\u003eschema,\n        $crafterEventRender-\u003esourcePath,\n        $crafterEventRender-\u003egeneratePath,\n        $crafterEventRender-\u003ereplaceList,\n        $crafterEventRender-\u003econtent // empty (call before render file)\n    ]]);\n}\n```\n\n#### After render\n`CrafterEventRender::AFTER` after render file\n\n```php\n//class FileCrafterBehavior extends Behavior\npublic function afterRender(CrafterEventRender $crafterEventRender): void {\n    Yii::error([ __METHOD__, [\n        $crafterEventRender-\u003eschema,\n        $crafterEventRender-\u003esourcePath,\n        $crafterEventRender-\u003egeneratePath,\n        $crafterEventRender-\u003ereplaceList,\n        $crafterEventRender-\u003econtent // content file\n    ]]);\n}\n```\n\n#### After generate\n`CrafterEventGenerate::AFTER` after generate all files\n\n```php\npublic function afterGenerate(CrafterEventGenerate $crafterEventGenerate): void {\n    Yii::info([ 'Generated files', [\n        $crafterEventGenerate-\u003efiles // CodeFile[]\n    ]]); \n}\n```\n\n___\n\n[Packagist](https://packagist.org/packages/andy87/yii2-file-crafter)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fyii2-file-crafter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fandy87%2Fyii2-file-crafter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fandy87%2Fyii2-file-crafter/lists"}