Как я могу вызвать расписание команд через URL на laravel? - PullRequest
0 голосов
/ 02 сентября 2018

Я использую Laravel 5.6

Я установил свое расписание в kernel.php так:

<?php
namespace App\Console;
use App\Console\Commands\ImportLocation;
use App\Console\Commands\ImportItem;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel
{
    protected $commands = [
        ImportLocation::class,
        ImportItem::class,
    ];
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('inspire')->dailyAt('23:00');

    }
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
        require base_path('routes/console.php');
    }
}

Итак, есть две команды

Я покажу одну из моих команд следующим образом:

namespace App\Console\Commands;
use Illuminate\Console\Command;
use App\Models\Location;
class ImportLocation extends Command
{
    protected $signature = 'import:location';
    protected $description = 'import data';
    public function __construct()
    {
        parent::__construct();
    }
    public function handle()
    {
        ...
    }
}

Я хочу запустить команду через URL. Так что не запускайте в командной строке

Я пытаюсь так:

Я добавляю этот скрипт: Route::get('artisan/{command}/{param}', 'CommandController@show'); в маршруты и создаю контроллер, подобный этому:

namespace App\Http\Controllers;
class CommandController extends Controller
{
    public function show($command, $param)
    {
        $artisan = \Artisan::call($command.":".$param);
        $output = \Artisan::output();
        return $output;
    }
}

И я звоню с URL следующим образом: http://myapp -local.test / artisan / import / location

Это работает. Но это просто запустить одну команду

Я хочу запустить все команды в ядре. Так запустите локацию импорта и импортируйте элемент

Как я могу это сделать?

1 Ответ

0 голосов
/ 03 сентября 2018

Что вы можете сделать, это зарегистрировать пользовательский метод в Kernel.php, чтобы получить все пользовательские зарегистрированные команды в защищенном массиве $commands:

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

Затем в вашем контроллере вы можете зациклить их все и выполнить их с помощью методов Artisan call() или queue():

$customCommands = resolve(Illuminate\Contracts\Console\Kernel::class)->getCustomCommands();

foreach($customCommands as $commandClass)
{
    $exitCode = \Artisan::call($commandClass);
    //do your stuff further
}

Подробнее о командах вы можете прочитать на странице документации

...