2014-03-19 15 views
1
用獨白的時候

我有一個簡單的類,讓我寫任何日誌文件:奇怪的錯誤:「無法找到固定記錄儀:: DEBUG」在Laravel

use Monolog\Logger; 
use Monolog\Handler\StreamHandler; 

class Mylog 
{ 
    public function __construct($log, $level = 'debug') 
    { 
     $this->monolog = new Logger($log); 

     $level = constant('Logger::'.strtoupper($level)); 

     $this->monolog->pushHandler(new StreamHandler(storage_path('logs/'.$log.'-'.date('Y-m-d').'.txt')), $level); 
    } 

    public function __call($method, $arguments) 
    { 
     $this->monolog->{$method}($arguments[0]); 
    } 
} 

這給了我錯誤:常數():無法找到固定記錄儀:: DEBUG

然而,推動處理程序時,如果我只是記錄儀:: DEBUG替換$的水平,它的工作原理。爲什麼它沒有找到恆定的,事實上,它存在?

回答

1

像參數的constant()功能在字符串中的類名必須是完全合格的。當你做記錄儀:: DEBUG它的工作原理,因爲類是use'd,所以它解析爲Monolog\Logger::DEBUG但字符串它只是保持Logger::DEBUG並且顯然不存在。

因此,簡單的辦法就是使用完全合格的名稱字符串內,即

$level = constant('Monolog\Logger::'.strtoupper($level)); 
+0

有道理,謝謝你的幫助的解釋@Seldaek – kjones