我正在开发一个包,我需要为它创建一个命令,它创建一个控制器,代码如下所示:
class MyCommand extends Command {
protected $name = 'package:mycommand';
public function __construct()
{
parent::__construct();
}
public function fire()
{
$this->call('vendor:publish');
$argName = $this->argument('name');
$this->call('make:controller', ['name' => $argName.'Controller']);
}
此命令有效,它会创建一个如下所示的控制器:
class wwController extends Controller {
public function index()
{
}
}
还有一些其他功能,但它们没有实现,
问题:
无论如何都要创建一个自定义controller
,它从我的包中的一个控制器扩展,让我们说MyController
并且还具有MyController
的功能
或者如果使用此命令无法执行此操作,是否还有其他适合此目的的命令?
我需要用这样的命令创建一个控制器:
class newController extends MyController {
public function myFunction()
{
}
}
答案 0 :(得分:3)
如果您想构建一个控制器,您可能需要签出Laracast/Generator项目,以获取如何完成此类事情的示例。
在MigrationMakeCommand.php Jeffrey(我假设作者在这里)创建了一个命令,该命令根据您传递给该命令的一些命令行参数生成迁移文件。这与你想要做的非常相似。
据我所知,你会想要注入文件系统和作曲家,正如作者在第56行
所做的那样/**
* Create a new command instance.
*
* @param Filesystem $files
* @param Composer $composer
*/
public function __construct(Filesystem $files, Composer $composer)
{
parent::__construct();
$this->files = $files;
$this->composer = $composer;
}
然后,您需要特别关注第156行上的链式方法调用,这非常接近您制作新控制器文件所需的步骤。
protected function compileMigrationStub()
{
$stub = $this->files->get(__DIR__ . '/../stubs/migration.stub');
$this->replaceClassName($stub)
->replaceSchema($stub)
->replaceTableName($stub);
return $stub;
}