# Пишем CRUD-генератор для Magento 2
generate.php
с таким кодом:
``` php
getDirContents($basePath);
$service->recurseRmdir($outPath);
mkdir($outPath);
foreach ($files as $file){
if(is_dir($file)){
$file = str_replace($basePath,'', $file);
$file = $outPath . $file;
echo $file . "\n";
$file = $service->processFileName($file,$variables);
if(!file_exists($file)){
mkdir($file,0777,true);
}
}
}
foreach ($files as $file){
if(is_dir($file)){
continue;
}
$content = file_get_contents($file);
$file = str_replace($basePath,'', $file);
$file = str_replace('_inc','', $file);
$file = $service->processFileName($file,$variables);
$file = $outPath . $file;
$path = dirname($file);
$content = $service->processContent($content,$variables);
file_put_contents($file,$content);
}
echo "Job is done\n";
```
Редактируем конфиг _config.php
. Указываем путь к установке Magento. Точнее, путь к модулю.
``` php
'/var/www/MAGENTO/app/code/Company/Filters'
];
```
Редактируем _variables.php
. Указываем параметры, которые мы будем использовать в генераторе. Название сущности, модуля и т.д.
``` php
'Company',
'module_name' => 'Filters',
'module_name_underscore' => 'DIY_Filters',
'view_path' => 'filters',
'entity' => 'Filter',
'view_path_ucf' => 'Filters',
'entity_lower' => 'filter',
'setup_version' => '1.0.0',
'table_name' => 'company_filter',
];
```
Берем уже реализованный grid в качестве шаблона. Кладем в папку template
.
Для подстановки placeholder в файлы используем тройные фигурные скобки.
``` php
___entity___.php_inc
Также имеет смысл поменять расширения файлов .php -> .php_inc. Чтобы убрать исправление ошибок IDE.
Логика работы генератора вынесена в класс: src/FileService.php
.
Замену для контента производим таким образом:
``` php
public function processContent($content,$variables)
{
foreach($variables as $key => $value){
$content = str_replace('{{{'.strtolower($key).'}}}', $value, $content);
}
return $content;
}
```
Для имен файлов - через тройное подчеркивание:
``` php
public function processFileName($file, $variables)
{
foreach($variables as $key => $value){
$file = str_replace('___'.strtolower($key).'___', $value, $file);
}
return $file;
}
```
Проверяем работу скрипта:
``` bash
php generate.php
```
Чтобы включить модуль в magento - переходим в папку с magento и выполняем команды.
``` bash
cd /magento2-project
bin/magento module:enable Vendor_ModuleName
bin/magento cache:clean
bin/magento setup:upgrade
```
В результате получаем простой и настраиваемый CRUD генератор.
Код доступен на github.
На этом пока все. Спасибо за внимание!