Список всех зарегистрированных переменных в представлении Laravel

Я использую Laravel 5. Я хотел бы знать, какие все переменные переданы в представление внутри самого представления.

Поскольку все переменные находятся в области представления, я думал, что могу использовать общую функцию PHP: get_defined_vars(); http://php.net/manual/en/function.get-defined-vars.php

Что-то вроде этого:

  // resources/view/home.blade.php <html> <body> <?php print_r(get_defined_vars()); ?> </body> </html> 

Но я хотел бы знать, есть ли лучший способ (что-то вроде View::getData() )

Примечание: get_defined_vars () не работает, потому что он возвращает сотни бесполезных переменных (компоненты Laravel)

Это фрагмент (частичный) с использованием print_r(get_defined_vars()) (я думаю, что он идет в бесконечном цикле рекурсии):

  Array ( [__path] => C:\net\laravel\storage\framework\views/8e030a77b0bdbacc2c4182fc04420d1d [__data] => Array ( [__env] => Illuminate\View\Factory Object ( [engines:protected] => Illuminate\View\Engines\EngineResolver Object ( [resolvers:protected] => Array ( [php] => Closure Object ( [this] => Illuminate\View\ViewServiceProvider Object ( [app:protected] => Illuminate\Foundation\Application Object ( [basePath:protected] => C:\net\laravel [hasBeenBootstrapped:protected] => 1 [booted:protected] => 1 [bootingCallbacks:protected] => Array ( [0] => Closure Object ( [static] => Array ( [instance] => Illuminate\Bus\BusServiceProvider Object ( [defer:protected] => 1 [app:protected] => Illuminate\Foundation\Application Object *RECURSION* ) ) [this] => Illuminate\Foundation\Application Object *RECURSION* ) [1] => Closure Object ( [static] => Array ( [instance] => Illuminate\Translation\TranslationServiceProvider Object ( [defer:protected] => 1 [app:protected] => Illuminate\Foundation\Application Object *RECURSION* ) ) [this] => Illuminate\Foundation\Application Object *RECURSION* ) ) [bootedCallbacks:protected] => Array ( ) [terminatingCallbacks:protected] => Array ( ) [serviceProviders:protected] => Array ( [0] => Illuminate\Events\EventServiceProvider Object ( [app:protected] => Illuminate\Foundation\Application Object *RECURSION* [defer:protected] => ) 

Related of "Список всех зарегистрированных переменных в представлении Laravel"

Используйте помощник dd :

 {{ dd(get_defined_vars()) }} 

Подробнее: https://laravel.com/docs/5.4/helpers#method-dd

Update (thx, @JoeCoder): вы можете дополнительно сократить «бесполезные» переменные, выполнив:

 {{ dd(get_defined_vars()['__data']) }} 

Если вы используете Laravel 5.1, который теперь позволяет расширять Blade с помощью настраиваемых директив, вы можете найти это полезным. Вам необходимо зарегистрировать директивы в AppServiceProvider, как в этом примере, или создать собственный провайдер.

  /** * Blade directive to dump template variables. Accepts single parameter * but also could be invoked without parameters to dump all defined variables. * It does not stop script execution. * @example @d * @example @d(auth()->user()) */ Blade::directive('d', function ($data) { return sprintf("<?php (new Illuminate\Support\Debug\Dumper)->dump(%s); ?>", null !== $data ? $data : "get_defined_vars()['__data']" ); }); /** * Blade directive to dump template variables. Accepts single parameter * but also could be invoked without parameters to dump all defined variables. * It works similar to dd() function and does stop script execution. * @example @dd * @example @dd(auth()->user()) */ Blade::directive('dd', function ($data) { return sprintf("<?php (new Illuminate\Support\Debug\Dumper)->dump(%s); exit; ?>", null !== $data ? $data : "get_defined_vars()['__data']" ); }); 

Для лучшей читаемости и отладки вы также можете создать помощник, который превращает вывод в массив.

 //add this to /vendor/laravel/framework/src/Illuminate/Support/helpers.php if (! function_exists('da')) { /** * Dump the passed variables to array and end the script. * * @param mixed * @return void */ function da() { array_map(function ($x) { dd($x->toArray()); }, func_get_args()); } }