web-dev-qa-db-fra.com

Répertorie toutes les variables enregistrées dans une vue Laravel

J'utilise Laravel 5.). J'aimerais savoir quelles sont toutes les variables transmises à une vue à l'intérieur de la vue elle-même.

Puisque toutes les variables sont dans la portée de la vue, je pensais pouvoir utiliser le générique PHP fonction: get_defined_vars();> [http: //php.net/manual/en/ function.get -fined-vars.php

Quelque chose comme ça:

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

Mais j'aimerais savoir s'il existe un meilleur moyen (quelque chose comme View::getData())

Remarque: get_defined_vars () ne fonctionne pas car il renvoie des centaines de variables inutiles (composants Laravel)

Ceci est un extrait (partiel) utilisant print_r(get_defined_vars()) (je pense que cela se passe en boucle de récursion infinie):

      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] => 
                                                                        )
52
giò

Utilisez l'assistant dd:

{{ dd(get_defined_vars()) }}

En savoir plus: https://laravel.com/docs/5.4/helpers#method-dd

Mise à jour (merci, @JoeCoder): vous pouvez réduire davantage les variables "inutiles" en faisant:

{{ dd(get_defined_vars()['__data']) }}
79
Limon Monte

Si vous utilisez Laravel 5.1 qui permet maintenant d’étendre Blade avec des directives personnalisées, cela pourrait vous être utile. Vous devez enregistrer des directives dans AppServiceProvider comme dans cet exemple ou créer vous possédez le fournisseur.

     /**
     * 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
cheelahim

Un peu la même chose, mais un peu plus ordonnée:

{{dd ($ __ data)}}

1
Leon

Pour une meilleure lisibilité et des fins de débogage, vous pouvez également créer un assistant qui convertit la sortie en tableau.

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