通过artisan命令laravel 5创建自定义控制器

时间:2015-02-15 14:39:08

标签: laravel laravel-5 artisan

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

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

    }
}

1 个答案:

答案 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;
}