【问题标题】:Laravel 5 - Creating Artisan Command for PackagesLaravel 5 - 为包创建 Artisan 命令
【发布时间】:2015-04-14 01:40:17
【问题描述】:

我一直在关注http://laravel.com/docs/5.0/commands,并且能够在 Laravel 5 中创建 artisan 命令。但是,我如何创建 artisan 命令并将其打包到包中?

【问题讨论】:

  • 创建一个新项目并查看 vendor/laravel/framework/src/Illuminate/Auth/*,有一个“Console”文件夹,您可以在其中查看 make:auth 命令的工作原理,并且 Auth 文件夹本身就是一个包,所以,你可以以它为例:)!

标签: php laravel laravel-5 laravel-artisan


【解决方案1】:

您可以并且应该使用$this->commands()register() 方法中在服务提供者中注册包命令:

namespace Vendor\Package;

class MyServiceProvider extends ServiceProvider {

    protected $commands = [
        'Vendor\Package\Commands\MyCommand',
        'Vendor\Package\Commands\FooCommand',
        'Vendor\Package\Commands\BarCommand',
    ];

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

【讨论】:

  • 感谢您的回答。但是我怎样才能将它引用到我的命令文件中呢?例如,如果我将所有命令文件放在 Commands 文件夹中,其中命令文件夹位于 MyServiceProvider 的同一路径上。如何链接到它?
  • 首先,必须自动加载命令。通常,如果您的包中的其他文件正常工作,则应该是这种情况。 (确保命令位于与其目录对应的正确命名空间中。这应该类似于namespace Vendor\Package\Commands)然后您只需在$commands 数组中使用它的完全限定名称来引用它。就像我编辑的答案一样......
  • 如果设置了 $deferred=true 则命令不会出现在工匠输出中.. :(
【解决方案2】:

在 laravel 5.6 中这很容易。

类 FooCommand,

<?php

namespace Vendor\Package\Commands;

use Illuminate\Console\Command;

class FooCommand extends Command {

    protected $signature = 'foo:method';

    protected $description = 'Command description';

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

    public function handle() {
        echo 'foo';
    }

}

这是包的serviceprovider。 (只需在启动函数中添加 $this->commands() 部分)。

<?php
namespace Vendor\Package;

use Illuminate\Events\Dispatcher;
use Illuminate\Support\ServiceProvider;

class MyServiceProvider extends ServiceProvider {

    public function boot(\Illuminate\Routing\Router $router) {
        $this->commands([
            \Vendor\Package\Commands\FooCommand ::class,
        ]);
    }
}

现在我们可以这样调用命令了

php 工匠 foo:方法

这将从命令句柄方法中回显“foo”。重要的部分是在包服务提供者的引导功能中给出正确的命令文件命名空间。

【讨论】:

    猜你喜欢
    • 2015-04-13
    • 1970-01-01
    • 2014-04-01
    • 2019-04-02
    • 1970-01-01
    • 2016-09-11
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多