【问题标题】:Anonymous Blade Component - Rendering slot variable to function yields array_key_exists(): The first argument should be either a string or an integer匿名刀片组件 - 将槽变量渲染到函数产生 array_key_exists():第一个参数应该是字符串或整数
【发布时间】:2021-03-04 19:05:34
【问题描述】:

Laravel 7.X

我创建了一个简单的匿名输入刀片组件,其中包括验证错误输出。它是以前工作模板的翻译。

组件如下:

<div class="form-group">
    <label for='{{$field}}'>{{$title}} @error($field) - <span class='text-danger'> {{ $message }} </span> @enderror </label>
    <input id='{{$field}}' name='{{$field}}' type="text" class='form-control{{ $errors->has($field) ? ' is-invalid' : '' }}' placeholder='{{$placeholder}}' {{$attributes}} value='{{ old($field, $value) }}' >
</div>

在视图中,我执行以下操作:

<x-input-validation autofocus onblur="validate()">
    <x-slot name="field">name</x-slot>
    <x-slot name="title">Name</x-slot>
    <x-slot name="placeholder">Add Name</x-slot>
    <x-slot name="value">{{$app->name}}</x-slot>
</x-input-validation>

在渲染期间,我收到以下错误消息:

array_key_exists(): The first argument should be either a string or an integer (View: C:\wamp64\www\DE\resources\views\components\input-validation.blade.php)

问题似乎与@error($field) 指令和旧的($field, $value) 函数有关。如果我更改这些以删除 $field 变量,它将呈现。

如果不存在验证错误,或者会话中没有存储以前的值,它似乎也可以正常工作。在这种情况下也能正常渲染。

经过多次尝试,一个花絮似乎是 $field 变量是 HTMLString 类型的。不确定这是否是红鲱鱼,但鉴于它在抱怨类型,我假设这是问题的根源。

任何想法我应该如何纠正这个问题?我被难住了。

谢谢!

【问题讨论】:

  • 我已经能够通过在每个 @error、$error->has($field) 和 old($field, $value) 函数中使用 html_entity_decode($field) 来解决这个问题.它现在正在工作。老实说,有点出乎意料。

标签: laravel laravel-blade


【解决方案1】:

我已经通过在每个 @error、$error->has($field) 和 old($field, $value) 函数中使用 html_entity_decode($field) 解决了这个问题。

由于 $field 是 HTMLString 的一个实例,html_entity_decode 返回一个字符串,这些函数可以接受。虽然 $field 只包含字符,除了类型转换,我看不到 $field 的内容有其他变化。

新组件变为:

<div class="form-group">
    <label for='{{$field}}'>{{$title}} @error(html_entity_decode($field)) - <span class='text-danger'> {{ $message }} </span> @enderror </label>
    <input id='{{$field}}' name='{{$field}}' type="text" class='form-control{{ $errors->has(html_entity_decode($field)) ? ' is-invalid' : '' }}' placeholder='{{$placeholder}}' {{$attributes}} value='{{ old(html_entity_decode($field), $value) }}' >
</div>

这解决了问题。我不禁认为这更多是 Laravel 处理此案的疏忽。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2022-11-10
    • 2019-01-07
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多