2015-05-01 18 views
10

Ich habe VarDumper mit Composer benötigt installiert. Ich habe die Funktion dump() in meinem Controller aufgerufen, das sollte richtig funktionieren?Warum funktioniert meine VarDumper in Symfony2 nicht?

composer require symfony/var-dumper 

-

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

    dump($messages); 
} 

Dies ist der Fehler, den ich bekommen. Aber warum kann ich nicht Dump in meinem Controller aufrufen?

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

Welche Version ist die Installation von Symfony aktiviert ist? Wie sieht Ihre Controller-Deklaration aus? – sjagr

Antwort

17

Je nach Umgebung können mehrere Deklarationen der globalen Funktionvorhanden sein(d.h. in Birne/XML, Birne/adobd, usw.).

Außerdem, wenn Sie genau auf die neuen Symfony aussehen Funktionsdeklaration Dump, es nur dann erstellt, wenn es nicht bereits vorhanden ist:

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

So ist die gute Lösung direkt VarDumper::dump() ist Symfony\Component\VarDumper\VarDumper aus dem Namensraum zu rufen. Ich schlage vor, es auch innerhalb eines exit() zu wickeln unerwartete Verhalten zu vermeiden:

use Symfony\Component\VarDumper\VarDumper; 

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

Legende! Es funktionierte mit der 2. Option, die Sie zur Verfügung gestellt haben. Sehr hilfreich, danke. –

-2

Versuchen Sie, Ihre Projektabhängigkeiten mit dem Befehl php composer.phar update zu aktualisieren. Dieser Befehl muss nach der composer require symfony/var-dumper ausgeführt werden.

+0

Nicht wirklich. ["Nach dem Hinzufügen/Ändern der Anforderungen werden die geänderten Anforderungen installiert oder aktualisiert."] (Https://getcomposer.org/doc/03-cli.md#require) – sjagr

+0

@sjagr Sie haben Recht. Vielleicht fehlt OP das 'php' im Anfangsbefehl? –

0

Komponist global erfordern symfony/var-dumper

Sie werden sehen: Geänderte aktuelle Verzeichnis (GLOBAL_COMPOSER_DIRECTORY)

In der php.ini: auto_prepend_file = (GLOBAL_COMPOSER_DIRECTORY) /vendor/autoload.php

Sie können Dump dann in allen Ihren Projekten verwenden, ohne es installieren zu müssen

+0

funktioniert nicht wirklich so weit. Muss ich sie in meinem Symfony-Projekt in eine use-Anweisung aufnehmen? –

+0

Sie müssen sicherstellen, dass die modifizierte php.ini von Ihrem PHP-Stack verwendet wird. In der Befehlszeile: php --ini In Apache: guillaumesmo

18

Vergewissern Sie sich, dass die DebugBundle Bündel in der Anwendung des Kernels

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

Danke, beim Upgrade von 2.3 habe ich dieses Bundle vermisst. – Alsciende

+4

Eigentlich ist diese Antwort die richtige. Gewählte Antwort erlaubt es, dass es funktioniert, aber dieses macht die Verwendung der Funktion dump() direkt –

+1

Die richtige Antwort –

Verwandte Themen