2015-05-01 9 views
10

Ho installato VarDumper utilizzando Compositore richiesto. Ho chiamato la funzione dump() nel mio controller, questo dovrebbe funzionare correttamente?Perché il mio VarDumper non funziona in Symfony2

composer require symfony/var-dumper 

-

public function indexAction() 
{ 
    $messages = Array(
      'x' => 'y', 
      'a' => 'b', 
      'c' => 'd' 
      ); 

    dump($messages); 
} 

Questo è l'errore che ottengo. Ma perché non posso chiamare dump nel mio controller?

Attempted to call function "dump" from namespace "App\Bundle\Controller". 
+0

Quale versione è la vostra installazione di Symfony? Come si presenta la dichiarazione del controllore? – sjagr

risposta

17

A seconda dell'ambiente, potrebbero esserci più dichiarazioni della funzione globale dump() (ad es. in pera/XML, pera/adobd, ecc.).

Inoltre, se si guarda da vicino la nuova discarica Symfony dichiarazione della funzione, viene creato solo se non esiste già:

if (!function_exists('dump')) { 
    /** 
    * @author Nicolas Grekas <[email protected]> 
    */ 
    function dump($var) 
    { 
     foreach (func_get_args() as $var) { 
      VarDumper::dump($var); 
     } 
    } 
} 

Quindi la buona soluzione è quella di chiamare direttamente VarDumper::dump() dallo spazio dei nomi Symfony\Component\VarDumper\VarDumper. Propongo inoltre di avvolgere all'interno di un exit() per evitare comportamenti imprevisti:

use Symfony\Component\VarDumper\VarDumper; 

class myClass 
{ 
    function myFunction() 
    { 
     exit(VarDumper::dump(...)); 
    } 
} 
+1

Legenda! Ha funzionato usando la seconda opzione che hai fornito. Molto utile, grazie. –

-2

tenta di aggiornare le dipendenze del vostro progetto con il comando php composer.phar update. Questo comando deve essere eseguito dopo lo composer require symfony/var-dumper.

+0

Non proprio. ["Dopo aver aggiunto/modificato i requisiti, i requisiti modificati saranno installati o aggiornati."] (Https://getcomposer.org/doc/03-cli.md#require) – sjagr

+0

@sjagr hai ragione. Forse OP manca il 'php' nel comando iniziale? –

0

compositore globale richiedono symfony/var-dumper

si vedrà: Cambiato directory corrente (GLOBAL_COMPOSER_DIRECTORY)

nel tuo php.ini: auto_prepend_file = (GLOBAL_COMPOSER_DIRECTORY) /vendor/autoload.php

È possibile utilizzare il dump in tutti i progetti senza installarlo

+0

non funziona davvero così tanto. Devo includerli in una dichiarazione di utilizzo nel mio progetto symfony? –

+0

Devi assicurarti che il php.ini modificato sia usato dal tuo stack php. In riga di comando: php --ini In apache: guillaumesmo

18

Assicurarsi che il DebugBundle fascio è abilitato nel kernel dell'applicazione

// app/AppKernel.php 
use Symfony\Component\HttpKernel\Kernel; 
use Symfony\Component\Config\Loader\LoaderInterface; 

class AppKernel extends Kernel 
{ 
    public function registerBundles() 
    { 
     $bundles = array(
     // ... 
     ); 

     if (in_array($this->getEnvironment(), array('dev', 'test'))) { 
      $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle(); 
      // ... 
     } 
    } 

    // ... 
} 
+2

Grazie, durante l'aggiornamento dalla 2.3 mi mancava quel pacchetto. – Alsciende

+4

In realtà questa risposta è quella giusta. La risposta scelta ti permette di farlo funzionare, ma questo rende l'uso della funzione dump() direttamente –

+1

La risposta corretta –

Problemi correlati