gpt4 book ai didi

php - Laravel 8 dd() 限制

转载 作者:行者123 更新时间:2023-12-05 01:49:14 24 4
gpt4 key购买 nike

我怎样才能增加 laravel 8 dd() 限制?我有很多嵌套关系,由于数据太多,我无法查看其中的大部分。比如这个

  #relations: array:4 [▼
"activecourses" => Illuminate\Database\Eloquent\Collection {#1346 ▼
#items: array:3 [▼
0 => App\Models\Studentcourse {#1353 ▶}
1 => App\Models\Studentcourse {#1354 ▼
#guarded: []
#connection: "mysql"
#table: "studentcourses"
#primaryKey: "id"
#keyType: "int"
+incrementing: true
#with: []
#withCount: []
+preventsLazyLoading: false
#perPage: 15
+exists: true
+wasRecentlyCreated: false
#escapeWhenCastingToString: false
#attributes: array:22 [ …22]
#original: array:22 [ …22]
#changes: []
#casts: []
#classCastCache: []
#attributeCastCache: []
#dates: []
#dateFormat: null
#appends: []
#dispatchesEvents: []
#observables: []
#relations: array:1 [ …1]
#touches: []
+timestamps: true
#hidden: []
#visible: []
#fillable: []
}
2 => App\Models\Studentcourse {#1355 ▶}
]
#escapeWhenCastingToString: false
}

我找到了这个链接 Laravel dd function limitations但我认为它已经过时了,因为 laravel 8 的新 dd 函数是

这是来自 vendor 文件夹。

use Symfony\Component\VarDumper\VarDumper;

if (!function_exists('dump')) {
/**
* @author Nicolas Grekas <p@tchwork.com>
*/
function dump($var, ...$moreVars)
{
VarDumper::dump($var);

foreach ($moreVars as $v) {
VarDumper::dump($v);
}

if (1 < func_num_args()) {
return func_get_args();
}

return $var;
}
}

if (!function_exists('dd')) {
/**
* @return never
*/
function dd(...$vars)
{
if (!in_array(\PHP_SAPI, ['cli', 'phpdbg'], true) && !headers_sent()) {
header('HTTP/1.1 500 Internal Server Error');
}

foreach ($vars as $v) {
VarDumper::dump($v);
}

exit(1);
}
}

尝试在 dd() 之前添加此行,但不起作用

   ini_set('xdebug.var_display_max_depth', 100);
ini_set('xdebug.var_display_max_children', 2000);
ini_set('xdebug.var_display_max_data', 2000);

查看嵌套数据有什么方法或替代方法吗?我不想使用 var_dumpprint_r,因为当有大量数据时浏览器会变慢。提前致谢。

最佳答案

这里已经回答了这个问题:Laravel dd function limitations - 编辑:那些仍然有效但不再完整(VarDumper 覆盖),不应在生产中使用。

覆盖 Laravel 转储

The Dumper is using Symfony's VarCloner which is extending the AbstractCloner. This class has a $maxItems attribute set to 2500.

基本上,您需要按照博文答案中的说明覆盖 Laravel Dumper。您还可以创建一个新方法,如 ddd(),允许使用自定义 Dumper 输出更大的输出。

请注意,非常大的数据集可能会使您的浏览器选项卡/窗口崩溃,因为 DOM 大小会随之增加。

备选方案

或者,如果您真的需要“实时”查看此数据(例如:API 路由),您可以返回 JSON 并使用 Postman 或 Chrome 调试器(网络选项卡,已解析的有效负载)检查它们。它们可以解析并提供“动态”数据 View ,就像 Laravel dump 对 HTML/CSS/JS 所做的那样。

非常大的 JSON (+50/100mo)

对于非常大的 JSON,我建议:

  • 将其下载为 JSON 文件
  • 使用大型 JSON 查看器/解析器查看它(我使用付费的 UltraEdit 来处理 500 个月以上的 JSON。一些免费软件足以处理较小的文件。我猜 Postman/Chrome 可以处理 50 个月)。同样,他们可以解析并提供动态 View ,如 dd/dump

编辑:

我刚刚测试了"Lucas Martin" solutionLaravel 8.6.12 上,它按预期工作:

编辑 2:有效但不完整,转储器在 8.X 中比 5.x 更复杂(server 格式)。逻辑是相同的,但前提是覆盖不再完成。我只会将它用于这个特定的调试案例。我会将这个简单/旧的逻辑与 custom method 一起使用.默认(截断):

enter image description here

VarDumper 更新处理程序(完整):

enter image description here

此解决方案的局限性在于浏览器。当 DOM 大小变得太大而无法存储在内存中时,它会因庞大的数据集而崩溃。另外,我只会在开发环境中使用它。

Laravel debugbar调试助手可能能够处理更大的对象和动态 View ,但仍然受限于浏览器内存和 DOM 大小。

来源:random JSON generator

关于php - Laravel 8 dd() 限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74371406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com