簡體   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