我有一个包含320个数组的数组,而常规var_dump
向我展示了包含所有嵌套元素的320个元素,Laravel的dd
帮助器截断了索引 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条完整记录以及如何增加限额? 相关主题Is Laravels' DD helper function working properly?实际上并未解释限制。
这是非常一致的行为,我已经使用Laravel 5.2和php7进行了测试
到处都有与元素#147完全相同的切割。使用CLI php artisan tinker
输出相同的剪切
...
"name" => "dccode" ] 147 => array:17 [
"total_unconfirmed_subscribers" => 0
16 ] 148 => array:17 [ 17]
...
答案 0 :(得分:13)
在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.这就是为什么你的第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);
}
}
答案 1 :(得分:3)
我对您的建议是在引导文件夹中创建一个自定义帮助文件
1)按照以下答案为您的Laravel应用程序创建自定义帮助器函数,如果它太复杂,则可以跳过以下步骤,将步骤2中的my函数用作任何常规函数,然后简单地将其称为>> https://stackoverflow.com/a/28290359/10539212
2)我想感谢这个人,我遵循他的指导来创建自己的ddd函数>> https://tighten.co/blog/a-better-dd-for-your-tdd
use Illuminate\Support\Debug\HtmlDumper;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
function ddd()
{
$args = func_get_args();
$defaultStringLength = -1;
$defaultItemNumber = -1;
$defaultDepth = -1;
foreach ($args as $variable) {
$dumper = 'cli' === PHP_SAPI ? new CliDumper() : new HtmlDumper();
$cloner = new VarCloner();
$cloner->setMaxString($defaultStringLength);
$cloner->setMaxItems($defaultItemNumber);
$dumper->dump($cloner->cloneVar($variable)->withMaxDepth($defaultDepth));
}
die(1);
}
-1 =无限制(易于通过这种方式进行自定义)
因此,现在使用此ddd函数时,您可以获得正常dd函数的完整输出。我认为这种方法比覆盖任何现有功能更好。但请注意,由于现在将完全显示任意深度的变量,因此可能会经历较长的加载时间。希望对您有所帮助。
答案 2 :(得分:1)
我的建议是您在 VarDumper 组件中添加一个 handler 。
在您的 AppServiceProvider.php 中:
(在Task.WhenAll
声明之前)
class
(在use Symfony\Component\VarDumper\VarDumper;
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\Dumper\HtmlDumper;
方法内部)
boot()
根据Symfony's VarDumper component documentation:
setMaxItems() 配置超过最小嵌套深度将被克隆的最大项目数。项目使用 广度优先算法,以便较低级别的项目具有较高的优先级 而不是深层嵌套的项目。指定-1将删除限制。
在文档中,您可以看到其他用于定制克隆器,翻斗者和脚轮组件的方法。