2016-08-18 65 views
5

我有320個數組的數組,而常規var_dump顯示我與所有嵌套元素正好320的元件,Laravel的dd輔助截斷嵌套元素在索引和所有其他元件與沒有選項截斷以擴展它們,請參閱下面的示例Laravel DD功能限制

146 => array:17 [▼ 
    "total_unconfirmed_subscribers" => 0 
    "total_subscribers_subscribed_yesterday" => 0 
    "unique_list_id" => "24324" 
    "http_etag" => ""fbb6febfca8af5541541ea960aaedb"" 
    "web_form_split_tests_collection_link" => "https://api.com/1.0/" 
    "subscribers_collection_link" => "https://api.com/1.0/" 
    "total_subscribers_subscribed_today" => 0 
    "id" => 23432 
    "total_subscribed_subscribers" => 0 
    "total_unsubscribed_subscribers" => 0 
    "campaigns_collection_link" => "https://api.com/1.0/" 
    "custom_fields_collection_link" => "https://api.com/1.0/accounts" 
    "self_link" => "https://api.com/1.0/accounts" 
    "total_subscribers" => 0 
    "resource_type_link" => "https://api.com/1.0/#list" 
    "web_forms_collection_link" => "https://api.com/" 
    "name" => "dccode" 
    ] 
    147 => array:17 [▼ 
    "total_unconfirmed_subscribers" => 0 
    …16 
    ] 
    148 => array:17 [ …17] 
    149 => array:17 [ …17] 

爲什麼它僅限於147個完整記錄以及如何增加限制? 相關主題Is Laravels' DD helper function working properly?實際上並未解釋限制。

這是相當一致的行爲,我曾與Laravel 5.2和PHP7上

  • Linux的測試(Laravel僞造,DO滴,Ubuntu的)
  • MAC(Laravel代客)
  • 的Windows(valet4windows )

處處得到確切的元素#147相同的剪輯。使用CLI php artisan tinker輸出相同的切割

... 
"name" => "dccode" ] 147 => array:17 [ 
"total_unconfirmed_subscribers" => 0 
16 ] 148 => array:17 [ 17] 
... 
+0

你有沒有想過使用'的print_r()'呢? – Derek

+0

'var_dump'和'print_r'都能正常工作,看到數據不是我的問題,我想了解dd限制。 – vitr

+0

你使用哪個laravel版本? 4.2和5.2都返回了20.000個元素。 – sleepless

回答

7

此前版本5.0 laravel的dd()功能看起來如下:

function dd() 
{ 
    array_map(function($x) { var_dump($x); }, func_get_args()); die; 
} 

自5.0它看起來像這樣:

function dd() 
{ 
    array_map(function ($x) { 
     (new Dumper)->dump($x); 
    }, func_get_args()); 

    die(1); 
} 

Dumper使用symfony的VarCloner這擴大了AbstractCloner。此類別的$maxItems屬性設爲2500.請參閱:https://github.com/symfony/var-dumper/blob/master/Cloner/AbstractCloner.php#L125

您每個陣列有17個項目。將它乘以147,得到2499.這就是爲什麼你的數組在第一個項目後被截斷的原因。

如果你想增加你需要重寫laravel的Dumper類(https://github.com/laravel/framework/blob/5.2/src/Illuminate/Support/Debug/Dumper.php):

public function dump($value) 
{ 
    if (class_exists(CliDumper::class)) { 
     $dumper = 'cli' === PHP_SAPI ? new CliDumper : new HtmlDumper; 

     $cloner = new VarCloner(); 
     $cloner->setMaxItems(5000); 
     $dumper->dump($cloner->cloneVar($value)); 
    } else { 
     var_dump($value); 
    } 
} 
+0

這實際上有效!很好的解釋,謝謝,你會推薦一種更好的方式來覆蓋我的自定義應用程序中的'轉儲'功能,而不會影響任何供應商代碼? – vitr

+0

是的,顯然將它直接寫入核心類是個不錯的主意。這只是一個提示,所以你知道如何增加限制。現在或多或少取決於你。一個簡單的方法是編寫你自己的dd函數。這很容易,因爲laravel正在檢查函數是否已經存在:http://stackoverflow.com/a/28475973/1233206 - 或者您需要創建一個擴展laravel的Dumper的自定義Dumper。這就是我的意思是「覆蓋」:) – sleepless

+0

是的,結束了自定義的'AppDumper'類和我的'dd',它在我的助手中使用'require __DIR __。'/ ../app/helpers.php';'在主自動載入之前在'boostrap/autoload.php'中 – vitr