Создание и использование команд Laravel 4

РЕДАКТИРОВАТЬ: Выяснил, где я ошибся, и поставил ответ в конце

Я пытаюсь создать команду Laravel, я вижу, что она значительно изменилась из "задач" в Laravel 3. Однако я не могу заставить ее работать. Это шаги, которые я предпринял:

Команда php artisan: выполните импорт

Возвращает

Команда успешно создана

Затем создается файл в каталоге команд, и я немного изменил его, чтобы вернуть "Hello World" так:

use Illuminate\Console\Command;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;

class Import extends Command {

    /**
     * The console command name.
     *
     * @var string
     */
    protected $name = 'command:import';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description.';

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

    /**
     * Execute the console command.
     *
     * @return void
     */
    public function fire()
    {
        return 'Hello World';
    }

    /**
     * Get the console command arguments.
     *
     * @return array
     */
    protected function getArguments()
    {
        return array(
            array('example', InputArgument::REQUIRED, 'An example argument.'),
        );
    }

    /**
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return array(
            array('example', null, InputOption::VALUE_OPTIONAL, 'An example option.', null),
        );
    }

}

Однако, когда я пытаюсь запустить команду следующим образом:

php artisan Импорт

Я получаю следующую ошибку:

[InvalidArgumentException] Команда "Импорт" не определена.

Я пробовал его с и без капиталов, а также назвал его "ImportCommand", так как документация называет его команду "FooCommand", но не повезло.

Любая помощь будет наиболее оценена.

Ответ 1

Собственно понял это. Далее в документации указывается, что вы должны зарегистрировать свою команду в "app/start/artisan.php", используя следующий метод:

Artisan::add(new import);

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

php artisan command:import

Одна последняя вещь. То, что возвращает fire(), не имеет значения, чтобы возвращать строки, вы должны их откликнуться.

Ответ 2

попробуйте это.

protected function getArguments()
{
    return [];
}

protected function getOptions()
{
    return [];
} 

также добавьте это в /app/start/artisan.php

Artisan::add(new ParseCommand);

затем запустите команду "Корневой каталог"

./artisan command:import; 

Ответ 3

В новых версиях Laravel нет команды import. Вам просто нужно сделать следующие две вещи:

  • Зарегистрируйте свою команду в app/start/artisan.php:

    Artisan::add(new Import);
    
  • Запустите команду в Artisan:

    php artisan command:name Import
    

Ответ 4

есть неправильное понимание команд Artisan из-за используемой формулировки.

В вашем случае вы выбираете: "command: import" как имя одной из ваших команд "Import".

Подумайте об этом как об объекте, используя методы.

Если "Импорт" имеет много команд:

вы можете использовать как имя команды > protected $name = 'import: csv';

другая команда будет > protected $name = 'import: txt';

и > protected $name = 'import: contacts';

поэтому ваши команды с природой "Импорт" лучше организованы.

и когда вы запрашиваете, вы видите, что ваши команды организованы как единый объект.

Если нет,

и у вас есть только одна команда, тогда дайте вашей команде одно четкое имя. protected $name = 'import';