Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 08.12.2015 16:34:34

Как создать команду (atrican command) + встроенный крон

подходит и для ларавела

/app/Console/Commands/MyCommand

<?php namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\DB;
use Symfony\Component\Console\Input\InputOption;
use Symfony\Component\Console\Input\InputArgument;
class MyCommand extends Command
{
    protected $name        = 'mycommand:hello-world';
    protected $description = 'Приветствет вас';
    public function fire()
    {
        $this->info( 'Hello World Started' );
        // все аргументы...
        $arguments = $this->argument();
        // все опции...
        $options = $this->option();
        // output all
        dd($arguments, $options);
    }
// ОБЪЯВЛЯЕМ АРГУМЕНТЫ, иначе пошлёт при указании неизвестного аргумента
    // array($name, $mode, $description, $defaultValue)
    protected function getArguments()
    {
        return [
            [ 'myArgument', InputArgument::OPTIONAL, 'myArgument', null ],
        ];
    }
// ОБЪЯВЛЯЕМ ОПЦИИ, иначе пошлёт при указании неизвестной опции
    // array($name, $shortcut, $mode, $description, $defaultValue)
    protected function getOptions()
    {
        return [
            [ 'myOption', null, InputOption::VALUE_OPTIONAL, 'myOption definition', null ],
        ];
    }
    // подробно тут http://laravel.com/docs/5.1/artisan
}

/app/Console/Kernel.php

<?php namespace App\Console;
use Illuminate\Console\Scheduling\Schedule;
use Laravel\Lumen\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
    protected $commands = [
        \App\Console\Commands\MyCommand::class,
    ];

// если требуется работать от крона
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('mycommand:hello-world myArgument --myOption="bla-bla-bla"')
            ->withoutOverlapping() // не запускать задачу если ещё работает предыдущая
            ->appendOutputTo(storage_path().'/logs/mycommand_myArgument_'.$mon.'.log')
            ->cron('*/20 * * * *')  // каждые 20 минут
//         ->everyFiveMinutes()
        ;
    }
}

работу команды можно проверить следующими путями:
аргумент+опция

php artisan mycommand:hello-world myArgument --myOption="bla-bla-bla"

output:

Hello World Started
array:2 [
  "command" => "mycommand:hello-world"
  "myArgument" => "myArgument"
]
array:9 [
  "myOption" => "bla-bla-bla"
  "help" => false
  "quiet" => false
  "verbose" => false
  "version" => false
  "ansi" => false
  "no-ansi" => false
  "no-interaction" => false
  "env" => null
]

только аргумент

php artisan mycommand:hello-world myArgument

output:

Hello World Started
array:2 [
  "command" => "mycommand:hello-world"
  "myArgument" => "myArgument"
]
array:9 [
  "myOption" => null
  "help" => false
  "quiet" => false
  "verbose" => false
  "version" => false
  "ansi" => false
  "no-ansi" => false
  "no-interaction" => false
  "env" => null
]

только опция

php artisan mycommand:hello-world --myOption="bla-bla-bla"

output:

Hello World Started
array:2 [
  "command" => "mycommand:hello-world"
  "myArgument" => null
]
array:9 [
  "myOption" => "bla-bla-bla"
  "help" => false
  "quiet" => false
  "verbose" => false
  "version" => false
  "ansi" => false
  "no-ansi" => false
  "no-interaction" => false
  "env" => null
]

Не в сети

Подвал раздела