bounty将在4天后过期。回答此问题可获得+100的声望奖励。draw134正在寻找此问题的最新答案。
我如何增加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,但我认为它过时了,因为新的dd功能为laravel 8是
这来自供应商文件夹。
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_dump
或print_r
,因为浏览器在有大量数据时会变慢。提前感谢。
3条答案
按热度按时间9rbhqvlz1#
有三种方法可以使用dd()方法。
1.打印到命令行(通过书面测试或工匠修补)
1.正在打印到浏览器。如果您使用Blade,则可以执行此操作。
1.打印到日志文件。使用日志外观,例如
Log::debug($activeForces)
由于数据量很大,甚至不建议将变量的内容打印到屏幕上。请尝试使用日志文件。
或者,你为什么不缩小被抛弃的内容的范围呢?例如:
dd($activeForces[0])
wwtsj6pe2#
因此,根据您的需求以及我使用的工具,Tracy可能是比dd()Visit their GitHub Here更好的工具
这将用Nette团队创建的Tracy PHP调试器替换Laravel中的默认调试系统。
这意味着您将使用
bdump($myArray,"Active Courses")
而不是dd($myArray)
(第二个参数是可选的,但在一个页面上使用多个bdumps()
时很有用,这样您就可以知道哪个是哪个)这也将允许您看到渲染的页面以及转储(和其他有用的功能,如路线,会话,甚至拉腊维尔终端)
jtoj6r0c3#
这个问题在这里已经得到了回答:Laravel dd function limitations-编辑:那些仍然工作但不再完整(
VarDumper
覆盖),并且不应在生产中使用。覆盖Laravel转储
转储程序正在使用扩展AbstractCloner的Symfony的VarCloner。此类的$maxItems属性设置为2500。
基本上,你需要重写Laravel的
Dumper
,就像在文章的答案中解释的那样。你也可以创建一个新的方法,比如ddd()
,用一个自定义的Dumper
来允许更大的输出。请注意,非常大的数据集可能会使浏览器选项卡/窗口崩溃,因为DOM大小会随之增长。
备选方案
或者,如果您确实需要“实时”查看此数据(例如:一个API路由),你可以返回JSON并用Postman或Chrome调试器检查它们(网络选项卡,解析的有效负载)。它们可以解析并提供一个“动态”的数据视图,就像Laravel
dump
对HTML/CSS/JS所做的那样。超大型JSON(+50 /100个月)
对于非常大的JSON,我建议:
dd/dump
。编辑:
我刚刚在
Laravel 8.6.12
上测试了"Lucas Martin" solution,它按预期工作:EDIT 2:可以工作但不完整,8.X中的转储程序比5.x中的更复杂(
server
)。逻辑是相同的,但前提是覆盖不再完整。我只会在这个特定的调试情况下使用它。我会使用这个简单/旧的逻辑和custom method。默认(截断):VarDumper
更新的处理程序(完整):这个解决方案的局限性在于浏览器。当DOM太大而无法存储在内存中时,它会因为数据集太大而崩溃。而且,我只会在开发环境中使用它。
Laravel debugbar调试助手也许能够处理更大的对象和动态视图,但仍然受到浏览器内存和DOM大小的限制。
制作者:random JSON generator