繁体   English   中英

如何在 Laravel livewire 中使用 foreach 循环仅访问特定的输入字段?

[英]How can I access only specific input fields using foreach loop in Laravel livewire?

我是这里的新手并使用 livewire,我正在做多个提交,以便用户可以添加许多主题及其各自的字段。 这是我的表格:

@foreach ($topics as $index => $topic )
                <div class="form-column new-form">
                    <h1 class="form-title">Topics </h1>
                    <div class="form-column">
                        <label for="topicname">topic name</label>
                        <input type="url" name="topics[{{$index}}][name]" wire:model="topics.{{$index}}.name" id="topicname" placeholder="Enter topic name">
                    </div>
                    <div class="form-row">
                        <div class="form-column">
                            <label for="coursestatus">status</label>
                            <select name="topics[{{$index}}][status]" id="status" wire:model="topics.{{$index}}.status">
                                <option value="enabled" selected>Enabled</option>
                                <option value="disabled">Disabled</option>
                            </select>
                        </div>
                        <div class="form-column">
                        </div>
                    </div>
                    <div class="form-column">
                        <label for="topicdescription">topic description</label>
                        <textarea name="topics[{{$index}}][description]" wire:model="topics.{{$index}}.description" id="topicdescription" cols="30" rows="10"></textarea>
                    </div>
                    <div class="form-column">
                        <label for="topicdocuments">any documents?</label>
                        <input type="file" name="topics[{{$index}}][document]" wire:model="topics.{{$index}}.document" multiple>
                    </div>
                    <button class="form-submit" wire:click.prevent="removetopic({{ $index }})">Remove topic&nbsp;&nbsp;<i class="bi bi-chevron-right"></i></button>


                </div>
                @endforeach
                <div class="form-row">
                    <button class="form-submit" wire:click.prevent="back">Course&nbsp;&nbsp;<i class="bi bi-chevron-left"></i></button>
                    <button type="submit" class="form-reset"><i class="bi bi-x-lg"></i>&nbsp;&nbsp;Reset</button>
                    <button type="submit" wire:click.prevent="addtopic" class="form-submit"><i class="bi bi-plus-lg"></i>&nbsp;&nbsp;Add This Topic</button>
                    <button class="form-submit" wire:click.prevent="test">Lessons&nbsp;&nbsp;<i class="bi bi-chevron-right"></i></button>
                </div>

我可以使用我的 livewire 组件中的测试函数来获取表单的完整数组:

<?php
namespace App\Http\Livewire; 
use Livewire\Component; 
use Illuminate\Support\Facades\DB; 

class Courseupload extends Component
{

public $topics = []

public function mount()
{
    $this->topics = [[
        'name'=>'', 'descrption'=> '', 'status'=> '', 'document'=> ''
    ]];
}


public function addtopic()  
{
    $this->topics[] = ['name'=> '', 'status'=> '', 'description'=>'', 'document'=>''];

}

public function test()
{
   dd($this->topics); 
}
}

示例数组多种形式的数组

如何从生成的每个表单中仅获取特定字段,例如“名称”、“描述”等?

谢谢。

您可以将array转换为collection ,然后使用pluck方法获取所需的单个字段。 如果您想要多个字段,那么您可以map每个元素并使用Arr::only方法返回您想要的字段。

例如:

$collection = collect([
    ['name' => 'First nane', 'status' => 'First status', 'description' => 'First description', 'document' => 'First document'],
    ['name' => 'Second name', 'status' => 'Second status', 'description' => 'Second description', 'document' => 'Second document']
]);

$singleField = $collection->pluck('name');

$multipleFields = $collection->map(function ($iter) {
    return Arr::only($iter, ['name', 'status']);
});

dd($singleField, $multipleFields);

以上内容对您有何不同,您是否会直接使用$this->topics属性:

$collection = collect($this->topics);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM