2012-12-05 79 views
0

我試圖在Zend Framework 2中使用FirePHP,但似乎有些東西缺失。這裏是我試圖運行的基本代碼:在Zend Framework 2中使用FirePHP

$writer = new Zend\Log\Writer\FirePhp(); 
$logger = new Zend\Log\Logger(); 
$logger->addWriter($writer); 
$logger->info('FirePHP logging enabled'); 

我得到的錯誤是「FirePHP Class not found」。我最初感到困惑,因爲我的Zend/Log/Writer文件夾中有一個FirePhp類。但後來我看到類構造函數需要一個FirePhp \ FirePhpInterface對象。所以我檢查了Zend/Log/Writer/FirePhp文件夾,並且在那裏有一個實現FirePhpInterface的FirePhpBridge類,但是它在構造函數中也需要一個FirePHP實例。我的Zend/Log/Writer/FirePhp文件夾中沒有任何FirePHP.php文件。我應該從別的地方得到這個嗎?

更新

我現在設法得到FirePHP的工作,但我試圖找出如何做到這一點在這樣一個乾淨的方式工作的。我已經得到了它工作的唯一方法就是把它在我的項目的根目錄下,並執行以下操作:

include_once('FirePHP.php'); 
$writer = new Zend\Log\Writer\FirePhp(new Zend\Log\Writer\FirePhp\FirePhpBridge(FirePHP::getInstance(true))); 
$logger = new Zend\Log\Logger(); 
$logger->addWriter($writer); 
$logger->info('FirePHP logging enabled'); 

我認爲平時我應該能夠創造像這樣一個作家:

$writer = new Zend\Log\Writer\FirePhp(); 

但是,如果出現錯誤,我相信是在Zend \ Log \ Writer \ FirePhp類的getFirePhp()函數中。該類做到這一點:

if (!$this->firephp instanceof FirePhp\FirePhpInterface 
    && !class_exists('FirePHP') 
) { 
    // No FirePHP instance, and no way to create one 
    throw new Exception\RuntimeException('FirePHP Class not found'); 
} 

// Remember: class names in strings are absolute; thus the class_exists 
// here references the canonical name for the FirePHP class 
if (!$this->firephp instanceof FirePhp\FirePhpInterface 
    && class_exists('FirePHP') 
) { 
    // FirePHPService is an alias for FirePHP; otherwise the class 
    // names would clash in this file on this line. 
    $this->setFirePhp(new FirePhp\FirePhpBridge(new FirePHPService())); 
} 

這是我迷路,以我應該如何設置的東西,所以這class_exists(「FirePHP」)調用找到正確的類和新FirePHPService()也適用正常。

回答

0

我應該從別的地方得到這個嗎?

是的,你需要讓FirePHP進入你的項目和自動加載。

如果您使用作曲家(我建議您這樣做),只需添加:

"firephp/firephp-core" : "dev-master" 

(或類似)在composer.json和更新。如果你不使用作曲家,你應該抓住firephp庫,讓你的自動加載器知道他們。

+0

OK,所以我下載了FirePHP文件,並設法得到這個工作的「貧民窟」的方式。意思是,我做了一個include('FirePHP.class。PHP的')在我的引導文件,我可以通過創建一個這樣的作家運行的東西︰$ writer = new Zend \ Log \ Writer \ FirePhp(新的Zend \ Log \ Writer \ FirePhp \ FirePhpBridge(FirePHP :: getInstance(true)) );但我有點失落,我實際上可以像我的代碼的名字空間和利用Zend \ Di模塊一樣乾淨地工作。我在我的文章中添加了詳細信息。 – Rocket04

2

首先,你應該將此代碼添加到您的Module.php模塊的autoload_classmap.php的

return array(
     //... 
     'Zend\Loader\ClassMapAutoloader' => array(
       __DIR__ . '/autoload_classmap.php', 
     ), 
    ); 

,在這裏內容

<?php 

return array(
    'FirePHP' => realpath(APPLICATION_PATH . '/vendor/FirePHP').'/FirePHP.php', 
); 

FirePHP.php(從FirePHP.class.php改名)從官方網站下載。

,那麼你可以寫下面的代碼在你的模塊中的任何地方,它會工作

use Zend\Log\Writer\FirePhp; 
use Zend\Log\Logger; 

    $writer = new FirePhp(); 
    $logger = new Logger(); 
    $logger->addWriter($writer); 
    $logger->info("hi");