2015-05-01 7 views
10

में काम नहीं कर रहा है मैंने संगीतकार की आवश्यकता का उपयोग कर VarDumper स्थापित किया है। मैंने अपने नियंत्रक में डंप() फ़ंक्शन कहा है, यह सही काम करना चाहिए?मेरा वर्डम्पर क्यों Symfony2

composer require symfony/var-dumper 

-

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

    dump($messages); 
} 

यह त्रुटि मैं हो रही है। लेकिन मैं अपने नियंत्रक में डंप क्यों नहीं कह सकता?

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

Symfony की स्थापना क्या संस्करण है में सक्षम है? आपका नियंत्रक घोषणा कैसा दिखता है? – sjagr

उत्तर

17

पर्यावरण पर निर्भर करते हुए, वैश्विक फ़ंक्शनकी कई घोषणाएं हो सकती हैं(यानी। नाशपाती/एक्सएमएल, नाशपाती/adobd, आदि में)।

इसके अलावा अगर आप नए Symfony को बारीकी से देखें समारोह घोषणा डंप, यह केवल यदि वह पहले से ऐसा नहीं करता बनाई गई है मौजूद हैं:

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

तो अच्छा समाधान सीधे नाम स्थान Symfony\Component\VarDumper\VarDumper से VarDumper::dump() कॉल करने के लिए है। मैं भी एक exit() अंदर यह रैप करने के लिए अनपेक्षित व्यवहार से बचने के लिए सुझाव देते हैं:

use Symfony\Component\VarDumper\VarDumper; 

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

किंवदंती! यह आपके द्वारा प्रदान किए गए दूसरे विकल्प का उपयोग करके काम करता है। बहुत उपयोगी, धन्यवाद। –

-2

php composer.phar update कमांड के साथ अपनी परियोजना की निर्भरताओं को अपडेट करने का प्रयास करें। वह आदेश composer require symfony/var-dumper के बाद चलाना चाहिए।

+0

वास्तव में नहीं। ["आवश्यकताओं को जोड़ने/बदलने के बाद, संशोधित आवश्यकताओं को स्थापित या अपडेट किया जाएगा।"] (Https://getcomposer.org/doc/03-cli.md#require) – sjagr

+0

@ एसजेगर आप सही हैं। शायद ओपी प्रारंभिक कमांड में 'php' गायब है? –

0

संगीतकार वैश्विक आवश्यकता सिम्फोनी/var-डम्पर

आप देखेंगे: बदली गई वर्तमान निर्देशिका (GLOBAL_COMPOSER_DIRECTORY)

अपने php.ini में: auto_prepend_file = (GLOBAL_COMPOSER_DIRECTORY)

/vendor/autoload.php

फिर आप इसे अपनी सभी परियोजनाओं में

+0

अभी तक वास्तव में काम नहीं कर रहा है। क्या मुझे उन्हें अपने सिम्फनी प्रोजेक्ट में उपयोग कथन में शामिल करने की आवश्यकता है? –

+0

आपको यह सुनिश्चित करना होगा कि संशोधित php.ini का उपयोग आपके php stack द्वारा किया जा रहा है। कमांड लाइन में: php --ini अपाचे में: guillaumesmo

18

सुनिश्चित करें कि DebugBundle बंडल आवेदन के कर्नेल

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

धन्यवाद, 2.3 से अपग्रेड करते समय मैं उस बंडल को याद कर रहा था। – Alsciende

+4

वास्तव में यह उत्तर सही है। चुना गया उत्तर आपको इसे काम करने की अनुमति देता है, लेकिन यह डंप() फ़ंक्शन का उपयोग सीधे बनाता है –

+1

सही उत्तर –