列出Laravel视图中的所有已注册变量

时间:2022-04-27 16:01:16

I am using Laravel 5. I would like to know which are all variables passed to a view inside the view itself.

我正在使用Laravel 5。我想知道哪些是传递给视图内部视图的所有变量。

Since all variables are in the view scope I thought I could use the generic PHP function: get_defined_vars(); http://php.net/manual/en/function.get-defined-vars.php

由于所有变量都在视图范围内,我认为可以使用通用的PHP函数:get_defined_vars();http://php.net/manual/en/function.get-defined-vars.php

Something like this:

是这样的:

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

But I would like to know if there is a better way (something like View::getData())

但是我想知道是否有更好的方法(类似于View::getData())

Note: get_defined_vars() deosn't work becausee it returns hundreds of useless variables (Laravel components)

注意:get_defined_vars() deosn不工作,因为它返回了数百个无用的变量(Laravel组件)

This is a snippet (partial) using print_r(get_defined_vars()) (i think it goes in infinite recursion loop):

这是一个使用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] => 
                                                                        )

3 个解决方案

#1


48  

Use the dd helper:

使用dd的助手:

{{ dd(get_defined_vars()) }}

Read more: https://laravel.com/docs/5.4/helpers#method-dd

阅读更多:https://laravel.com/docs/5.4/helpers # method-dd

Update (thx, @JoeCoder): you can further cutdown on the "useless" variables by doing:

更新(thx, @JoeCoder):您可以通过以下操作进一步减少“无用”变量:

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

#2


3  

If you are using Laravel 5.1 which now allows to extend Blade with custom directives you might find this useful. You need to register directives in AppServiceProvider like in this example or create you own provider.

如果您使用的是Laravel 5.1,现在允许使用定制的指令扩展Blade,您可能会发现这是有用的。您需要像本例中那样在AppServiceProvider中注册指令,或者创建您自己的provider。

     /**
     * 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']"
        );
    });

#3


0  

For better readability and debugging purposes, you can also create a helper which turns output into an array.

为了更好的可读性和调试目的,您还可以创建一个助手,将输出转换为数组。

// as per comment from Braunson add this to custom helpers function in app\helpers.php and include it via composer.

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());
    }
}

#1


48  

Use the dd helper:

使用dd的助手:

{{ dd(get_defined_vars()) }}

Read more: https://laravel.com/docs/5.4/helpers#method-dd

阅读更多:https://laravel.com/docs/5.4/helpers # method-dd

Update (thx, @JoeCoder): you can further cutdown on the "useless" variables by doing:

更新(thx, @JoeCoder):您可以通过以下操作进一步减少“无用”变量:

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

#2


3  

If you are using Laravel 5.1 which now allows to extend Blade with custom directives you might find this useful. You need to register directives in AppServiceProvider like in this example or create you own provider.

如果您使用的是Laravel 5.1,现在允许使用定制的指令扩展Blade,您可能会发现这是有用的。您需要像本例中那样在AppServiceProvider中注册指令,或者创建您自己的provider。

     /**
     * 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']"
        );
    });

#3


0  

For better readability and debugging purposes, you can also create a helper which turns output into an array.

为了更好的可读性和调试目的,您还可以创建一个助手,将输出转换为数组。

// as per comment from Braunson add this to custom helpers function in app\helpers.php and include it via composer.

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());
    }
}