تولید کد با یک دستور
تولید کد با یک دستور
برای تولید کد از یک دستور، سه گام وجود دارد:
- ایجاد یک قالب Twig برای کدی که میخواهید تولید کنید.
- ایجاد و ثبت یک سرویس Generator سفارشی برای پردازش قالب Twig.
- قراردادن سرویس Generator سفارشی درون دستور
تمام قالبهای Twig باید درون یک دایرکتوری templates
از زیرمجموعه افزونه شما قرار بگیرند. برای نمونه:
templates/module/info.yml.twig
name: {{ module }}
type: {{ type }}
description: {{ description }}
core: {{ core }}
package: {{ package }}
{% if dependencies %}
dependencies:
{% for dependency in dependencies %}
- {{ dependency }}
{% endfor %}
{% endif %}
## ایجاد یک سرویس Generator سفارشیبرای ایجاد یک سرویس Generator سفارشی، ابتدا کلاسی ایجاد کنید که از Drupal\Console\Core\Generator\Generator
تبعیت میکند. برای نمونه:
src/Generator/ModuleGenerator
namespace Drupal\your_extension\Generator;
use Drupal\Console\Core\Generator\Generator;
class ModuleGenerator extends Generator
{
...
}
با استفاده از متد renderFile()
، که از کلاس Generator
به ارث رسیده است، قالب Twig خود را پردازش کنید.
public function generate($module, $machineName, $output_dir, $description, $core, $package, $dependencies) {
$parameters = [
'module' => $module,
'core' => $core,
'description' => $description,
'package' => $package,
'dependencies' => $dependencies,
];
$this->renderFile(
'module/info.yml.twig',
$output_dir.'/'.$machineName.'.info.yml',
$parameters
);
}
در نهایت، کلاس Generator خود را به عنوان یک سرویس سفارشی درون console.services.yml
ثبت کنید.
services:
your_extension.module_generator:
class: Drupal\your_extension\Generator\ModuleGenerator
tags:
- { name: drupal.generator }
اطمینان یابید که برچسب drupal.generator
وارد شده باشد تا پردازشگر Twig به صورت صحیح راهاندازی گردد.
درون console.services.yml
، سرویس Generator سفارشی را به عنوان یک آرگومان برای دستور خود قرار دهید.
services:
your_extension.generate_module:
class: Drupal\your_extension\Command\Generate\ModuleCommand
arguments: ['@your_extension.module_generator']
tags:
- { name: drupal.command }
و Generator سفارشی را درون پارامتر constructor از کلاس Command قرار دهید.
use Drupal\your_extension\Generator\ModuleGenerator;
class ModuleCommand extends Command
{
/**
* ModuleCommand constructor.
*
* @param \Drupal\your_extension\Generator\ModuleGenerator $generator
*/
public function __construct(ModuleGenerator $generator) {
$this->generator = $generator;
parent::__construct();
}
...
}
اکنون میتوانید Generator را از متد execute()
دستور خود فراخوانی کنید تا فایلهای مورد نیاز پردازش گردند.
protected function execute(InputInterface $input, OutputInterface $output) {
...
$this->generator->generate(
$module,
$machineName,
$modulePath,
$description,
$core,
$package,
$dependencies
);
}