【发布时间】:2019-11-15 09:20:22
【问题描述】:
为了了解我想要做什么,这里简单解释一下:我想创建模板。
一个“模板”有一个“面板” 这个“面板”有一些“项目”和另一个“面板” 我们要一步一步做,直到最后一个“Item”
我想要这样的东西:
- Template
- Panel "Section"
- Panel "Slider"
- Panel "Slide 1"
- Item "Text 1"
- Item "Text 2"
- Item "Button"
- Panel "Slide 2"
- Panel "Buttons"
- Item "Button 1"
- Item "Button 2"
- Item "Text"
借助 Laravel 的多态关系,我有 3 个模型,它们是“Panel”、“Item”和“PanelContent”(这个模型有一些属性“parent_id”、“contentable_id”和“contentable_type”,有助于了解哪个 Panel 是parent,以及哪个 Item 或 Panel 将是内容。
显然,我的模型包含一些对获取内容和父级有用的函数。
我做了什么
目前,我使用递归函数让Panel的孩子逐步构建一个具有我在开头显示的结构的数组。
private function getChildren(PanelContent $panelContent, string $parentName, string $key): void
{
$this->result['template']['global_panel'][$parentName][$key] = $panelContent->contentable->toArray();
if ($panelContent->contentable_type === 'panel') {
foreach($panelContent->contentable->contents as $key => $container) {
$this->getChildren($container, $container->contentable->name, $key);
}
}
}
我想要什么
我想要这样的东西,比如树状结构。
$this->result = [
'template' => [
'id' => 1,
'name' => 'MySlider'
'contents' => [
'id' => 745,
'name' => 'slider',
'type' => 'panel',
'slides' => [
0 => [
'id' => 500,
'name' => 'slide',
'type' => 'panel'
'buttons' => [
0 => [
'id' => 877,
'name' => 'button',
'type' => 'item'
]
]
],
1 => [
'id' => 500,
'name' => 'slide',
'type' => 'panel'
'buttons' => [
0 => [
'id' => 877,
'name' => 'button',
'type' => 'item'
]
]
]
]
]
]
];
我目前拥有的东西
目前,我有这样的事情:
$this->result = [
'template' => [
'id' => 1,
'name' => 'MySlider'
'contents' => [
'id' => 745,
'name' => 'slider',
'type' => 'panel'
],
'slides' => [
0 => [
'id' => 500,
'name' => 'slide',
'type' => 'panel'
],
1 => [
'id' => 500,
'name' => 'slide',
'type' => 'panel'
]
],
'buttons' => [
0 => [
'id' => 877,
'name' => 'button',
'type' => 'item'
],
1 => [
'id' => 877,
'name' => 'button',
'type' => 'item'
]
]
]
];
使用这段代码,结果是“正常的”,因为这一行的键是错误的:
$this->result['template']['global_panel'][$parentName][$key] = $panelContent->contentable->toArray();
但我真的不知道如何处理我的数据。 我希望我的解释是好的。你对此有什么想法吗?如何正确构建我的数组(当然是 json)?
谢谢你,祝你有美好的一天!
【问题讨论】:
-
为什么
'global_panel'在您的代码中作为键出现在“我目前拥有的东西”部分?好问题,顺便说一句! -
感谢您的回复!在第一次调用我的函数之前,我已经开始使用模板和他的面板构建我的数组,这个名为“global_panel”。我以前这样做是因为我知道总是只有一个模板和一个“global_panel”。
-
所以问题是按钮不在幻灯片内。这是正确的吗?
-
没错。我所有的 Panel/Item 子项都不在他们的幻灯片中。我只是用按钮显示,但每个孩子都有同样的问题,比如this
-
我是 Laravel 的菜鸟,但如果一切都失败了,你可以迭代幻灯片并将具有相同键的按钮移动到幻灯片中。如果您想要这种非传统的解决方案,请告诉我。
标签: php arrays laravel recursion tree