【问题标题】:How to render html from a @foreach loop in a textarea如何从 textarea 中的 @foreach 循环呈现 html
【发布时间】:2021-01-28 12:28:48
【问题描述】:

使用 Laravel 8 livewire,我需要在 textarea 中的每一行呈现一个名称列表 ($list)。 我这样做

<div class=" border border-red-800 rounded-lg mt-8 p-4 w-full bg-green-300">
    <form>

        <textarea rows="10"  class="w-full bg-yellow-100">
        
            @foreach ($list as $maltproducer)
                {{$maltproducer->name}}
            @endforeach

        </textarea>
        <x-input.group label="Producer" for='name' :error="$errors->first('name')"
            class="flex flex-col w-full p-2 border border-jbrown-peachpuf bg-jbrown-darker rounded-md ">
            <x-input.text wire:model="name" type="text" class="" name="name" id="name" value="" />
        </x-input.group>
        <button wire:click.prevent="store()" class="bg-red-400 px-2 py-1 border rounded-lg mt-2">Add this
            producer</button>
    </form>
</div>

名称每行显示一个,但不在行首。要将它们放在行首,我必须将我的源代码移动到行首,如下所示。

@foreach ($list as $maltproducer) 
{{$maltproducer->name}} 
@endforeach

这是不可接受的,因为代码编辑器可能会在我不知道的情况下对文件进行不同的格式设置。
我尝试了各种方法,例如

@foreach ($list as $maltproducer)
  <p>{{$maltproducer->name}}</p>
@endforeach

但在这种情况下,&lt;p&gt; 标记会显示但不会被解释。

我也尝试过{!!$maltproducer-&gt;name!!}、{!!&lt;p&gt;$maltproducer-&gt;name&lt;/p&gt;!!} 等,但我永远无法获得好的结果,即在每行的开头有一个名字。

解决办法是什么?

【问题讨论】:

    标签: php html arrays laravel laravel-livewire


    【解决方案1】:

    文本区域将其标签之间的所有内容呈现为值 - 这包括空格、制表符和换行符。所以你想在你想要的实际值之前或之后打印每一行而不带任何空格。为了最好地做到这一点,是在代码中打印没有任何“漂亮”格式的输出。

    我们可以通过提取您要打印的集合中的字段来实现这一点,然后用换行符作为粘合剂将其分解。在 PHP 中,这看起来像

    implode("\n", $list->pluck('name'))
    

    然后它只是直接在文本区域之间打印,没有任何间距或换行符。

    <textarea rows="10" class="w-full bg-yellow-100">{{ implode("\n", $list->pluck('name')) }}</textarea>
    

    更接近 Laravel,直接在集合上使用 implode() 方法,

    <textarea rows="10" class="w-full bg-yellow-100">{{ $list->implode('name', "\n") }}</textarea>
    

    【讨论】:

    • 感谢您的回答。不幸的是,它不起作用。我有一个 implode 错误:ErrorException implode(): Invalid arguments passed (查看:/ORIGINAL-P1/LARAVEL/EASYBEER/resources/views/livewire/malt/producer-lw.blade.php) (查看:/ORIGINAL-P1 /LARAVEL/EASYBEER/resources/views/livewire/malt/producer-lw.blade.php) 如果我只使用 $list->pluck('name') 我得到一个数组 ['name1',"name2",.. ..,"nameX"] 是正确的,因此我不明白错误来自哪里。
    • 嗯.. dd($list-&gt;pluck('name')); 是什么?它是什么类型的,它只是一个带有一堆名称的一维数组吗?
    • 你也可以直接使用{{ $list-&gt;implode('name', "\n") }},试试看
    • 最后一个提案只有第一行有前导空格。这是 dd($list->pluck('name') 的输出: Illuminate\Database\Eloquent\Collection {#435 ▼ #items: array:3 [▼ 0 => App\Models\Malt\Producer {#436 ▶} 1 => App\Models\Malt\Producer {#437 ▶} 2 => App\Models\Malt\Producer {#438 ▶} ] } 请参阅编辑############# #########在原帖中
    • $list-&gt;implode('name', "\n") 自己应该可以正常工作。但正如我在回答中所说,&lt;textarea&gt; 标签之间不应有任何空格或换行符。它需要完全是我在上面发布的片段,而不是用换行符格式化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    相关资源
    最近更新 更多