Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何生成动态Laravel Nova选择场?_Laravel_Laravel 6_Laravel Nova - Fatal编程技术网

如何生成动态Laravel Nova选择场?

如何生成动态Laravel Nova选择场?,laravel,laravel-6,laravel-nova,Laravel,Laravel 6,Laravel Nova,我正在尝试创建一个动态的拉拉维尔新星选择场,但遇到了一些问题 我的配置文件中有一个数组,我正试图使用它来生成这些值。这是我的密码: Select::make('Options')->options(function () { $options = config('options.options'); $optionsArray = []; foreach($options as $index => $option) { $optionsArra

我正在尝试创建一个动态的拉拉维尔新星选择场,但遇到了一些问题

我的配置文件中有一个数组,我正试图使用它来生成这些值。这是我的密码:

Select::make('Options')->options(function () {
    $options = config('options.options');
    $optionsArray = [];
    foreach($options as $index => $option) {
        $optionsArray[$index] = $option;
    }
    return [
        $optionsArray
    ];
}),

但是,这似乎不起作用。
$optionsArray
中填充了我想要的所有值,但前端的Nova中没有选择字段。我怎样才能做到这一点呢?

对于其他正在为此而挣扎的人来说,解决方案是在返回时将
$optionsArray
包装在
数组过滤器
方法中,如下所示:

return array_filter($optionsArray);

您当前的解决方案比实际需要的更复杂。考虑下面的代码片段,它是您的解决方案的通用版本:

$input = [
    'a' => 123,
    'b' => 234,
    'c' => 'ABC'
];
$output = [];

foreach($input as $index => $option) {
    $output[$index] = $option;
}
Select::make('Options')->options(function () {
    return config('options.options');
})
转储
$input
$output
将产生相同的结果:

array(3) {
  ["a"]=>
  int(123)
  ["b"]=>
  int(234)
  ["c"]=>
  string(3) "ABC"
}
array(3) {
  ["a"]=>
  int(123)
  ["b"]=>
  int(234)
  ["c"]=>
  string(3) "ABC"
}
这意味着我们可以省略这一步,这就带来了以下中间解决方案:

$input = [
    'a' => 123,
    'b' => 234,
    'c' => 'ABC'
];
$output = [];

foreach($input as $index => $option) {
    $output[$index] = $option;
}
Select::make('Options')->options(function () {
    return config('options.options');
})
因为
选择
对象上的
->options($opts)
函数接受一个选项数组作为回调函数的替代,我们只需将
配置('options.options')
传递给它即可。为了确保在缺少配置时代码不会中断,我们还可以使用
[]
作为默认值,将其作为第二个参数传递:

Select::make('Options')->options(config('options.options', []))

如果将嵌套数组传递给
->options($opts)
方法(或从传递的回调返回一个),则将创建选择选项组。如果要对选择框的选项进行分组(例如,按国家对城市进行分组),此选项非常方便,如下所示:

Austria
  Vienna
  Bregenz
Germany
  Berlin
  Hamburg
United States
  New York
  Los Angeles
  Detroit
为此,您需要将选项设置为以下形式的数组,其中数组键用作内部存储值,并且可以自由更改:

[
    'vienna' => ['label' => 'Vienna', 'group' => 'Austria'],
    'bregenz' => ['label' => 'Bregenz', 'group' => 'Austria'],
    'berlin' => ['label' => 'Berlin', 'group' => 'Germany'],
    'hamburg' => ['label' => 'Hamburg', 'group' => 'Germany'],
    'new_york' => ['label' => 'New York', 'group' => 'United States'],
    'los_angeles' => ['label' => 'Los Angeles', 'group' => 'United States'],
    'detroit' => ['label' => 'Detroit', 'group' => 'United States'],
]


通过在回调中返回选项之前对选项使用
array\u filter($opts)
,您将删除
null的选项。这仅在具有动态选项的动态环境中才有意义。

您的解决方案比必要的更复杂:
Select::make('options')->options(配置('options.options',[]))
。使用
array\u filter()
只会删除
null
s,您只需在配置中省略即可。非常感谢!你能回答这个问题,让它被接受吗?