在 laravel 8 中使用选择选项的旧多选数组
Posted
技术标签:
【中文标题】在 laravel 8 中使用选择选项的旧多选数组【英文标题】:old multiselect array using select option in laravel 8 【发布时间】:2021-12-15 11:25:41 【问题描述】:我正在尝试创建将在编辑时使用的旧值,但它正在返回
htmlspecialchars(): Argument #1 ($string) must be of type string, array given
每次
但是当我 dd 变量时,我发现它有数组,但是当它到达选项时,它变成了错误
这是我在刀片中的选择
!! Form::label('functional_area_id', 'Functional Area', ['class' => 'bold']) !!
<?php
$functionalAreaIds = old('functional_area_id',$jobFunctionalAreasIds);
?>
-- this codes works perfect but it doesn't display the relation between child and parent and i want that to be displayed
!! Form::select('functional_area_id[]', $functionalAreas, $functionalAreaIds, array('class'=>'form-control select2-multiple', 'id'=>'functional_area_id','multiple'=>'multiple')) !! --
<select name="functional_area_id[]" id="functional_area_id" class="form-control select2-multiple" multiple="multiple">
@foreach ($menulist as $category)
<option value= $category->functional_area_id $functionalAreaIds > $category->functional_area </option>
@if (count($category->children) > 0)
@include('submenu', ['submenu' => $category->children, 'parent' =>
$category->functional_area])
@endif
@endforeach
</select>
!! APFrmErrHelp::showErrors($errors, 'functional_area_id') !!
</div>
这是获取数组的控制器
public function jobFunctionals()
return $this->hasMany('App\JobFunctionalAreas', 'job_id', 'id');
public function getJobFunctionalsArray()
return $this->jobFunctionals->pluck('functional_area_id')->toArray();
【问题讨论】:
【参考方案1】:您只能使用 $variable
输出字符串,因为Blade 会通过htmlspecialchars
转义运行$variable
,这就是为什么您尝试输出 $functionalAreaIds
时出错的原因,从名称来看,它是一个数组。
我不知道您在 submenu
部分中包含什么,但它可能是无效的 HTML。 select
元素中允许的唯一标签是 option
和 optgroup
标签。 Optgroups 需要围绕选项打开和关闭,所以我看不出这在您的设置中是如何工作的。
另外,您的option
标签中有语法错误:
<option value= $category->functional_area_id $functionalAreaIds > $category->functional_area </option>
你希望这会做什么?这将 - 如果它完全有效 - 会导致这样的结果:
<option value=1 [1,5,6] >Area 1</option>
这显然不是有效的 HTML。你希望数组在每个选项值之后做什么?
要修复代码中的 option
部分,您可以执行以下操作:
<option value=" $category->functional_area_id " @if(in_array(category->functional_area_id, $functionalAreaIds)) selected @endif > $category->functional_area </option>
这将设置 $functionalAreaIds
数组中的所有选定选项。
也许你应该在测试时去掉包括submenu
在内的代码,因为这也可能破坏你的HTML,然后从那里拿走它。
另一个提示:
<?php
$functionalAreaIds = old('functional_area_id',$jobFunctionalAreasIds);
?>
可以这样写在刀片中:
@php($functionalAreaIds = old('functional_area_id',$jobFunctionalAreasIds))
【讨论】:
为了您的信息,包含子菜单是因为我在选择下拉菜单中显示父子关系。另外,如果您查看注释中的代码,它会被写入,因为它与它一起工作的问题是关系没有显示出来,我还没有想出一种方法来在表单中显示它:选择所以这就是原因。感谢您尝试您提供的有关删除 html 的提示。 那么,它对你有用吗? :-) 不,还在尝试... 有什么问题? 无法弄清楚如何显示作为多选值出现的旧值以上是关于在 laravel 8 中使用选择选项的旧多选数组的主要内容,如果未能解决你的问题,请参考以下文章
如何加入从我的数组的每个元素的数据库中提取的结果并在 Laravel 8 中以 json 形式返回