Я использую 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
Оно работает. Но он просто запускает одну команду
Я хочу запустить все команды в ядре. Итак, запустите местоположение импорта и элемент импорта
Как мне это сделать?
@D. Петров Я просто выполняю одну команду. Я хочу, чтобы если URL-адрес вызвал, он вызовет всю команду. Таким образом, каждая команда в kernel.php будет запущена. Как мне это сделать?
Итак, вы хотите вызывать все команды с данного URL-адреса /import/location, даже если вся ваша логика основана на разделении /command/parameter? Или вы хотите создать еще один URL, чтобы запустить их все сразу?






Что вы можете сделать, так это зарегистрировать настраиваемый метод в вашем 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
}
Подробнее о командах вы можете узнать на страница документации
Разве вы не вызываете свою команду
importс параметромlocation? Это одна из двух команд.