加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 如何在Laravel 5中从包中注册console命令?

发布时间:2020-12-14 19:48:00 所属栏目:大数据 来源:网络整理
导读:从Laravel 5开始,我感兴趣的是 – 如何在Laravel 5中注册和使用来自包的控制台命令. 正如laracast讨论https://laracasts.com/discuss/channels/tips/developing-your-packages-in-laravel-5一样,我创建了一个目录结构,将我的包添加到自动加载并创建一个服务
从Laravel 5开始,我感兴趣的是 – 如何在Laravel 5中注册和使用来自包的控制台命令.

正如laracast讨论https://laracasts.com/discuss/channels/tips/developing-your-packages-in-laravel-5一样,我创建了一个目录结构,将我的包添加到自动加载并创建一个服务提供者

<?php namespace GoodvinEternalTree;

use ConsoleInstallCommand;
use IlluminateSupportServiceProvider;

class EternalTreeServiceProvider extends ServiceProvider
{
    public function boot()
    {

    }

    public function register()
    {
        $this->registerCommands();
    }

    protected function registerCommands()
    {
        $this->registerInstallCommand();
    }

    protected function registerInstallCommand()
    {
        $this->app->singleton('command.eternaltree.install',function($app) {

            return new InstallCommand();
        });
    }

    public function provides()
    {
        return [

            'command.eternaltree.install'
        ];
    }
}

我的InstallCommand.php脚本存储在/ src / Console中

<?php namespace GoodvinEternalTreeConsole;

use IlluminateConsoleCommand;
use SymfonyComponentConsoleInputInputOption;
use SymfonyComponentConsoleInputInputArgument;

class InstallCommand extends Command {

    protected $name = 'install:eternaltree';
    protected $description = 'Command for EternalTree migration & model install.';

    public function __construct()
    {
        parent::__construct();
    }

    public function fire()
    {
        $this->info('Command eternaltree:install fire');
    }

}

我在app.php&注册服务提供商执行dump-autoload.但是当我尝试执行时

php artisan eternaltree:install

它告诉我

[InvalidArgumentException] There are no commands defined in the "eternaltree" namespace.

我认为我的命令没有被服务提供商注册,因为php artisan list没有显示我的命令.任何人都可以向我解释在Laravel 5中在自己的包中注册命令的正确方法是什么?

不需要使用服务容器和单例.您只需将命令类放入$this->命令([]);数组到服务提供者的register()部分.

像那样 :

$this->commands([
    AcmeMyCommand::class
]);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读