Ограничения функции Laravel dd

у меня есть массив из 320 массивов, в то время как обычный var_dump показывает мне ровно 320 элементов со всеми вложенными элементами, что Laravel-это dd helper усекает вложенный элемент по индексу 147 и все остальные элементы усечены без возможности их расширения, см. пример ниже

  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 полными записями и как увеличить лимит? Связанная тема вспомогательная функция DD Laravels работает правильно? не на самом деле объясните пределы.

Это довольно последовательное поведение, я тестировал с Laravel 5.2 и php7 на

  • Linux (Laravel Forge, DO droplet, Ubuntu)
  • Mac (Laravel Valet)
  • окна (valet4windows)

везде получил точно такой же разрез на элементе #147. Использование CLI php artisan tinker выводит тот же разрез

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

1 ответов


до версии 5.0 фреймворк Laravel это выглядела следующим образом:

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. Вот почему Ваш массив at key 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);
    }
}