2016-08-18 9 views
5

var_dump定期的に私のすべてのネストされた要素を正確に320の要素を示しているが、私は、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?は実際にその制限を説明していません。

これはかなり一貫性のある動作、私は

  • Linux上でLaravel 5.2とPHP7でテストしてみたさ
  • マック(Laravelバレー)
  • のWindows(valet4windows(Laravelフォージは、液滴は、UbuntuをDO) )

どこでも、要素#147のまったく同じカットを得ました。 CLI php artisan tinkerを使用すると、以下のように見えた前バージョン5.0 laravelのdd()機能に同じカット

... 
"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

を出力します

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が得られます。そのため、キー147の配列は最初の項目の後に切り捨てられます。

あなたが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関数を書くことです。関数が既に存在するかどうかを確認するので、これは簡単です:http://stackoverflow.com/a/28475973/1233206 - 代わりに、laravelのDumperを拡張しているカスタムDumperを作成する必要があります。それは私が "上書き"で意味していたものです:) – sleepless

+0

ええ、カスタム 'AppDumper'クラスと私のヘルパー' require __DIR __。/ ../app/helpers.php 'でそれを使用する 'dd'メインの自動ロードの前に 'boostrap/autoload.php'で – vitr

関連する問題