Как настроить расписание маршрутов в моем приложении [duplicate]

Как будто вы пытаетесь получить доступ к объекту, который является null. Рассмотрим ниже пример:

TypeA objA;

. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException, что имеет смысл.

См. Также этот пример:

String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
30
задан user3345632 5 March 2015 в 00:04
поделиться

4 ответа

Пока нет способа (не уверен, что когда-нибудь будет). Однако вы можете создать свою собственную команду Artisan Command , которая может это сделать. Создайте команду 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 в верхней части вывода.

39
ответ дан Bogdan 19 August 2018 в 04:08
поделиться
  • 1
    Для Laravel 4: php artisan command:make CallRoute. Ядро на самом деле является маршрутизатором, поэтому команда должна иметь $this->info(app()[\Illuminate\Routing\Router::class]->handle($request));. Команда добавляется к artisan в app/start/artisan.php с Artisan::add(new CallRoute); – dave1010 21 May 2015 в 15:58
  • 2
    Это решение, похоже, перестало работать для Laravel 5.4 с этой ошибкой: исключение «Illuminate \ Contracts \ Container \ BindingResolutionException» с сообщением «Target [\ Illuminate \ Contracts \ Http \ Kernel] не является реальным». – Thomas Cheng 22 March 2017 в 19:07
  • 3
    Найдено исправление. Вместо: app () ['Illuminate \ Contracts \ Http \ Kernel'], используйте: app () - & gt; make (\ Illuminate \ Contracts \ Http \ Kernel :: class) – Thomas Cheng 22 March 2017 в 19:21
  • 4
    make: команда для версии 5.5 – Hoàng Đăng 12 January 2018 в 11:09

Я использую Laravel 5.0, и я запускаю контроллеры, используя этот код:

$ php artisan tinker
$ $controller = app()->make('App\Http\Controllers\MyController');
$ app()->call([$controller, 'myMethodName'], []);

последний [] в app()->call() может содержать аргументы, такие как [user_id] => 10 и т. д. '

24
ответ дан Broshi 19 August 2018 в 04:08
поделиться
  • 1
    есть ли способ назвать это неинтерактивным? – linuxbandit 17 December 2016 в 14:11
  • 2
    Не уверен, что я понимаю, что такое «неинтерактивно» ... – Broshi 18 December 2016 в 13:58
  • 3
    php artisan tinker открывает оболочку, в которую я должен поместить остальные 2 строки. Но я хотел бы просто выполнить это, потому что я помещаю его в сценарий. На данный момент я просто решил, сделав строчку 2 и 3 одной и вложив ее в первую очередь - задавался вопросом, было ли лучшее решение – linuxbandit 20 December 2016 в 09:00
  • 4
    hmm хорошо я использовал это для тестов, поэтому я просто писал каждую строку за раз и видел ответ после отправки строки 3 – Broshi 21 December 2016 в 11:48
  • 5
    @grasshopper, если вы помещаете его в скрипт, тогда это неправильный инструмент. Вместо этого вы должны использовать пользовательскую команду artisan. Затем вы можете просто запустить php artisan mycommand вместо tinker. – James Hulse 13 March 2017 в 21:33

Для 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

9
ответ дан Matt Habermehl 19 August 2018 в 04:08
поделиться
0
ответ дан Koushik Das 30 October 2018 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: