В рамках kohana я могу вызвать контроллер через командную строку, используя
php5 index.php --uri=controller/method/var1/var2
Можно ли вызвать контроллер, который я хочу в Laravel 5 через cli? Если да, как это сделать?
Пока нет способа (не уверен, что когда-нибудь будет). Однако вы можете создать свою собственную команду Artisan, которая может это сделать. Создайте команду CallRoute
используя CallRoute
команду:
php artisan make:console CallRoute
Это создаст класс команд в app/Console/Commands/CallRoute.php
. Содержимое этого класса должно выглядеть следующим образом:
<?php namespace App\Console\Commands; use Illuminate\Console\Command; use Symfony\Component\Console\Input\InputOption; use Illuminate\Http\Request; class CallRoute extends Command { protected $name = 'route:call'; protected $description = 'Call route from CLI'; public function __construct() { parent::__construct(); } public function fire() { $request = Request::create($this->option('uri'), 'GET'); $this->info(app()['Illuminate\Contracts\Http\Kernel']->handle($request)); } protected function getOptions() { return [ ['uri', null, InputOption::VALUE_REQUIRED, 'The path of the route to be called', null], ]; } }
Затем вам необходимо зарегистрировать команду, добавив ее в массив $commands
в app/Console/Kernel.php
:
protected $commands = [ ..., 'App\Console\Commands\CallRoute', ];
Теперь вы можете вызвать любой маршрут , используя следующую команду:
php artisan route:call --uri=/route/path/with/param
Имейте в виду, что эта команда вернет ответ, поскольку он будет отправлен в браузер, а это означает, что он содержит заголовки HTTP в верхней части вывода.
Я использую Laravel 5.0, и я запускаю контроллеры, используя этот код:
$ php artisan tinker $ $controller = app()->make('App\Http\Controllers\MyController'); $ app()->call([$controller, 'myMethodName'], []);
последний []
в app()->call()
может содержать такие аргументы, как [user_id] => 10
т. д.
Для Laravel 5.4: php artisan make: команда CallRoute
Затем в app/Console/Commands/CallRoute.php
:
namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Http\Request; class CallRoute extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'route:call {uri}'; /** * The console command description. * * @var string */ protected $description = 'php artsian route:call /route'; /** * Create a new command instance. * * @return void */ public function __construct() { parent::__construct(); } /** * Execute the console command. * * @return mixed */ public function handle() { $request = Request::create($this->argument('uri'), 'GET'); $this->info(app()->make(\Illuminate\Contracts\Http\Kernel::class)->handle($request)); } }
Затем в app/Console/Kernel.php
:
protected $commands = [ 'App\Console\Commands\CallRoute' ];
Вызов: php artisan route:call /path