gpt4 book ai didi

php - 使用 laravel 命令生成多个文件

转载 作者:行者123 更新时间:2023-12-04 13:38:48 24 4
gpt4 key购买 nike

你能帮我解决一个问题吗?我用 php artisan make:command 创建了一个命令从现有模型生成存储库类型类。问题是我需要生成 2 个或更多文件而不是从 stub 生成单个文件。我找不到有关该主题的文档。目前我所取得的是我只从模板生成一个文件。

<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputArgument;

class MakeRepository extends GeneratorCommand
{
/**
* The console command name.
*
* @var string
*/
protected $name = 'make:repository';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a new repository';

/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Repository';

/**
* @inheritDoc
*/
protected function getStub()
{
return __DIR__ . '/stubs/MakeRepository/ModelRepositoryInterface.stub';
}

/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return [
['name', InputArgument::REQUIRED, 'The name of the model to which the repository will be generated'],
];
}

/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Repositories';
}
}


编辑 #1

我在目录中有 2 个 stub 文件:
app/Console/Commands/stubs/MakeRepository
ModelRepository.stub
ModelRepositoryInterface.stub

我希望当您执行命令时...例如: php artisan make:repository Blog ,这两个文件是在以下目录中创建的:
/app/Repositories/Blog/BlogRepository.php
/app/Repositories/Blog/BlogRepositoryInterface.php

最佳答案

您可以编写一个新命令来创建存储库接口(interface),然后在 MakeRepository 中调用它。

我认为这种方法符合SRP。

// In MakeRepository.php

// Override handle method
public function handle()
{
if (parent::handle() === false && ! $this->option('force')) {
return false;
}

if ($this->option('interface')) {
$this->call('make:repository-interface', ['name' => $this->getNameInput() . 'Interface']);

}
}

/**
* Get the console command arguments.
*
* @return array
*/
protected function getArguments()
{
return [
['name', InputArgument::REQUIRED, 'The name of the model to which the repository will be generated'],
['interface', 'i', InputOption::VALUE_NONE, 'Create a new interface for the repository'],
];
}

也可以引用官方make模型的代码。
https://github.com/laravel/framework/blob/6.x/src/Illuminate/Foundation/Console/ModelMakeCommand.php

关于php - 使用 laravel 命令生成多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com