команда не найдена, хотя я ее регистрирую Laravel 6.x - PullRequest
0 голосов
/ 28 февраля 2020

Так что рассмотрите поставщика услуг, да, я знаю, что я регистрирую эту команду в двух местах, но просто дайте мне немного времени, чтобы объяснить:

<?php

namespace App\Modules\Core\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Support\DeferrableProvider;
use Illuminate\Foundation\AliasLoader;
use App\Modules\Core\Handlers\RedirectHandler;
use App\Modules\Core\Console\Commands\CreateAdminUser;
use App\Modules\Core\Values\IsMedicalRecordEmpty;

class CoreProvider extends ServiceProvider
{

    protected $commands = [
        CreateAdminUser::class,
    ];

    /**
     * Register services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(RedirectHandler::class, function($app) {
            return new RedirectHandler();
        });

        $this->app->bind(IsMedicalRecordEmpty::class, function($app) {
            return new IsMedicalRecordEmpty();
        });
    }

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

    /**
     * Bootstrap services.
     *
     * @return void
     */
    public function boot()
    {
        if ($this->app->runningInConsole()) {
            $this->commands([
                CreateAdminUser::class,
            ]);
        }
    }
}

Итак, как уже было сказано, мы видим, что я регистрируюсь эта команда в двух местах, потому что я пытаюсь выяснить, почему при вызове php artisan команда не отображается, она отображается только в том случае, если я зарегистрировал ее в app\Console\Kernel, а потому что я пытаюсь использовать модульный подход к кодовая база, я хочу зарегистрировать его в своем сервис-провайдере, для которого зарегистрировано следующее:

'providers' => [

    ...

    /**
     * Module Related Providers
     */
    App\Modules\Core\Providers\CoreProvider::class,

    ...
],

Я правильно регистрирую провайдера, я (да, я знаю, мне не нужно регистрировать команду дважды ) зарегистрируйте команду так, как это объяснил стек, так или иначе, теоретически это должно работать.

Но, увы, команда не отображается при запуске php artisan. На всех.

Команда проста:

<?php

namespace App\Modules\Core\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\Mail;
use Illuminate\Auth\Events\Verified;
use App\Modules\Core\Users\Mail\GeneratedAdmin;
use App\Modules\Core\Users\Models\User;
use App\Modules\Core\Users\Services\RegisterUserService;

class CreateAdminUser extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'create:admin {first_name} {last_name} {email}';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Create one admin.';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {

        // do stuff here ...
    }
}

Есть идеи?

1 Ответ

10 голосов
/ 09 марта 2020

Ваш код перемаркирует register(), сначала в методе с привязками, а затем снова с вашим методом, вызывающим $this->command() - вы даже правильно ссылаетесь на своего поставщика услуг? PHP должен был сказать вам это - это было для меня, когда я попробовал ваш пример кода ...

 Whoops\Exception\ErrorException  : Cannot redeclare App\Modules\Core\Providers\CoreProvider::register()

Стоит отметить, что удаление первого метода с привязками привело к отображению команды для меня.

...