【问题标题】:old multiselect array using select option in laravel 8在 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();
}

【问题讨论】:

    标签: php laravel laravel-8 laravel-blade


    【解决方案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 的提示。
    • 那么,它对你有用吗? :-)
    • 不,还在尝试...
    • 有什么问题?
    • 无法弄清楚如何显示作为多选值出现的旧值
    猜你喜欢
    • 2021-10-23
    • 2020-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    • 2021-07-19
    • 1970-01-01
    • 2021-09-04
    • 2015-10-05
    相关资源
    最近更新 更多