我试图从刀片模板传递一个数组(源自自定义配置文件)到控制器将其处理成一个表单字段。配置数组应该像一个'模板',这样可以通过修改配置文件轻松创建表单。
虽然传递数组似乎工作,但我不可能访问它的元素(未定义索引)。
(部分)配置文件
return [
'tabs' => [
'Menu' => [
'name' => 'menu',
'type' => 'string',
'length' => 100,
'default' => null
],
...
]
]
在我的刀片模板中,我迭代这个数组调用控制器函数:
@foreach($tabs as $key => $fld)
{!! 'App'Classes'Fields::createField($key, $fld, $page) !!}
@endforeach
简化后的控制器:
class Fields
{
public static function createField($key, $fld, $page)
{
var_dump($fld);
// Result-------------------------------
// array (size=4)
// 'name' => string 'menu' (length=4)
// 'type' => string 'string' (length=6)
// 'length' => int 100
// 'default' => null }
var_dump($fld['name']);
// Result-------------------------------
// ErrorException in Fields.php line 19:
// Undefined index: name
// (The other elements also can't be accessed)
}
我真的不明白。Var_dump显示一个有效的数组,但它的元素不能被访问。我一连好几个小时都在坐立不安。这是Laravel的bug还是我自己的bug ?: -)
您是否尝试过在createField()
方法中循环$fld
数组以查看结果?这可以让你对这个bug有一点了解…
@foreach($tabs as $key => $fld)
{!! 'App'Classes'Fields::createField($key, $fld, $page) !!}
@endforeach
<<p> 简化控制器/strong> <?php
class Fields {
public static function createField($key, $fld, $page){
// JUST FOR DEBUGGING PURPOSES: TRY THIS & SEE WHAT YOU GET.
// BUT CHECK FIRST IF $fld IS AN ARRAY
if( is_array($fld) ){
foreach($fld as $key=>$value){
var_dump($key);
var_dump($value);
}
}else{
// OTHERWISE, TRY DETERMINING THE TYPE OF $fld
var_dump("'$fld IS AN OBJECT? ", is_object($fld));
var_dump("'$fld IS A STRING? ", is_string($fld));
}
var_dump($fld);
var_dump($fld['name']);
}
}
<?php
class Fields {
public static function createField($key, $fld, $page){
// CREATE VARIABLES FOR EACH EXPECTED VALUE(S):
// INITIALIZE THEM TO NULL...
$name = $type = $length = $default = null;
// JUST FOR DEBUGGING PURPOSES: TRY THIS & SEE WHAT YOU GET.
// BUT CHECK FIRST IF $fld IS AN ARRAY
if( is_array($fld) ){
foreach($fld as $key=>$value){
switch($key){
case "name":
$name = $value;
break;
case "type":
$type = $value;
break;
case "length":
$length = $value;
break;
case "default":
$default = $value;
break;
}
}
}
echo $name;
echo $type;
echo $length;
echo $default;
}
}