Как я могу вызвать расписание команд через URL-адрес на laravel?

Я использую 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

Оно работает. Но он просто запускает одну команду

Я хочу запустить все команды в ядре. Итак, запустите местоположение импорта и элемент импорта

Как мне это сделать?

Разве вы не вызываете свою команду import с параметром location? Это одна из двух команд.

D. Petrov 02.09.2018 12:27

@D. Петров Я просто выполняю одну команду. Я хочу, чтобы если URL-адрес вызвал, он вызовет всю команду. Таким образом, каждая команда в kernel.php будет запущена. Как мне это сделать?

Success Man 03.09.2018 03:17

Итак, вы хотите вызывать все команды с данного URL-адреса /import/location, даже если вся ваша логика основана на разделении /command/parameter? Или вы хотите создать еще один URL, чтобы запустить их все сразу?

D. Petrov 03.09.2018 11:39
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
3
1 099
1

Ответы 1

Что вы можете сделать, так это зарегистрировать настраиваемый метод в вашем 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
}

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

Другие вопросы по теме