在 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 元素中允许的唯一标签是 optionoptgroup 标签。 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 中获取选择输入的旧值?

如何在多选表单 laravel 中选择所有选项?

Laravel将变量传递给多选下拉数组到字符串转换错误

如何加入从我的数组的每个元素的数据库中提取的结果并在 Laravel 8 中以 json 形式返回

我应该如何从 Angular-2 的下拉列表中使用多选选项绑定数组

antd+vue3 多选框的值为对象数组