2016-08-09 24 views
0

我正在寫一個API在Symfony 3中,我想使用Symfony VarDumper dump()函數。然而,dump()正在輸出HTML,這在我的情況下非常煩人。 (我的客戶端調用API不會呈現HTML)強制轉儲()-VarDumper輸出文本

我寧願輸出爲純文本,JSON,Yaml或至少是在CLI模式下由dump()使用的輸出。

什麼是一個很好的方法來做到這一點?

+0

這是一個詭計問題嗎?使用json串行器功能來輸出json。 – Cerad

+0

當我正在開發或調試時,有時候會有一個變量,並且此變量可能是任何類型的值或對象。我喜歡能夠快速使用dump()獲得有關變量和對象類型的想法等。我可能會在ArrayCollections,表單類型,服務等上使用dump()。 也許您錯過了解我的意圖? 你是否建議我使用json_encode()? Surly這將無法輸出複雜的嵌套對象進行調試,包括公開對象的私有屬性? – Sam

+0

確實,我以爲你想用自卸車作爲你的api的一部分。我在控制檯命令以及phpunit測試中使用了它,並且我得到了可讀的輸出。而不是使用包裝器轉儲功能,你可以嘗試VarDumper :: dump(),看看會發生什麼。 – Cerad

回答

0

我可以使用下面的代碼做這個

use Symfony\Component\VarDumper\Cloner\VarCloner; 
use Symfony\Component\VarDumper\Dumper\CliDumper; 
use Symfony\Component\VarDumper\VarDumper; 

//................ 

CliDumper::$defaultOutput = 'php://output'; 
VarDumper::setHandler(function ($var) { 
    $cloner = new VarCloner(); 
    $dumper = new CliDumper(); 
    $dumper->dump($cloner->cloneVar($var)); 
}); 

dump($debugMe); 

我還可以提到可以獲取轉儲()輸出到文本/ CLI格式而不是HTML,我會鼓勵使用的print_r的()for var_dump()在Symfony應用程序中進行調試時,通常輸出會更混亂和混亂,並且出於某種原因,print_r()在某些場合甚至無法使用。

0

比方說,你已經呈現在你的控制器到樹枝文件像這樣:

return $this->render('admin/maintain_divisions.html.twig', array(
     'form' => $form->createView(), 
     'var' => $variable, 
)); 

哪裏var是varaible;然後在你將使用的樹枝文件中:

{{ dump(var) }} 

該變量可以是任何東西,甚至是一個學說結果集。

在一個控制器,你可以使用:

var_dump($variable); 

這是一個PHP函數。

+0

感謝您的建議。之前我使用的是「raulfraile/ladybug-bundle」ldd()函數(配置爲輸出文本,而不是HTML),輸出更容易讀取var_dump(),在某些情況下,var_dump()輸出幾乎不可讀。 print_r()似乎打到無限循環或者什麼東西,執行永遠不會完成。我正在切換到VarDumper,因爲瓢蟲似乎不再受到支持,目前它與作曲家的依賴性相沖突。 目前我沒有在這個應用程序的任何地方使用樹枝,但是感謝您指出{{dump()}} – Sam

+0

是的,您是正確的山姆,您應該爲數組使用'print_f()'。我忘了那個。如果它循環,肯定有什麼不對。我強烈建議使用TWIG文件(在DEV環境中僅**)來轉儲。如果它是一個數組,您將在TWIG中轉儲時看到所有細節。如果你認爲我的幫助,你應該爲我的答案做'upvote'。謝謝! –