1

我正在开发一个包,我需要为它创建一个命令来创建一个控制器,代码如下所示:

 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()
   {

    }
}
4

1 回答 1

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;
}
于 2015-11-01T13:27:43.183 回答