2015-03-19 22 views
34

Sto utilizzando Laravel 5. Vorrei sapere quali sono tutte le variabili passate a una vista all'interno della vista stessa.Elenca tutte le variabili registrate all'interno di una vista Laravel

Dal momento che tutte le variabili sono nel perimetro vista ho pensato che avrei potuto utilizzare la funzione PHP generico: get_defined_vars();http://php.net/manual/en/function.get-defined-vars.php

Qualcosa di simile a questo:

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

Ma vorrei sapere se c'è una migliore modo (si parla di View::getData())

Nota: get_defined_vars() lavoro deosn't becausee restituisce centinaia di variabili inutili (laravel componenti)

Si tratta di un frammento di (parziale) usando print_r(get_defined_vars()) (credo che va in loop ricorsione infinita):

 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] => 
                     ) 
+1

Rendi l'esempio più piccolo. Non aspettarti che tutti lo leggano. – gawi

+0

hi @gawi: questo esempio mostra solo il risultato di print_r (get_defined_vars()) e ho preso solo una porzione –

risposta

43

Utilizzare la dd aiutante:

{{ dd(get_defined_vars()) }} 

Per saperne di più: https://laravel.com/docs/5.4/helpers#method-dd

Aggiornamento (thx, @JoeCoder): è possibile ulteriormente ridurre le variabili "inutili" facendo:

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

Non funziona, quella funzione restituisce centinaia di variabili inutili. Non posso pubblicare immagini (non abbastanza reputazione) altrimenti potrei mostrare –

+2

@llnk Se si usa 'dd' come suggerito, quelle variabili" inutili "sono compresse e finiscono per mostrare solo una manciata (di variabili di primo livello). Il modo più semplice per vedere i dati (al contrario di 'print_r'. – JoeCoder

+0

@llnk l'ha appena testato, non ci sono" centinaia di variabili inutili ": http://i.imgur.com/B6ciHRS.png –

3

Se si utilizza laravel 5.1, che ora permette di estendere lama con le direttive personalizzati si potrebbe trovare questo utile. È necessario registrare le direttive in AppServiceProvider come in questo example o creare il proprio 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']" 
     ); 
    }); 
0

Per una migliore leggibilità e il debugging, è anche possibile creare un helper che trasforma l'output in un 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

I su ggest non modificare i file di base o dei fornitori, ma aggiungi una funzione di helpers personalizzati in 'app \ helpers.php' e includerla tramite compositore. – Braunson

Problemi correlati