Параметры флажка Laravel livewire не проверяются

Я пробовал много способов заполнить старые проверенные значения на странице редактирования livewire.

Способ 1:

public $role_id, $name, $new_permissions = [];
public function mount($id)
{
/

$old_permissions = \App\Models\UserRolePermission::where('user_role_id', $this->role_id)->pluck('permission_id')->toArray();
// here new_permissions is my wire:model name in view for the checkbox input
// so I tried to initialize the new_permissions array by old_permissions array
    $this->new_permissions = $old_permissions;
    $this->role_id = $id;
}

Способ 2:

Вручную получил разрешения в представлении и проверил in_array для проверки old_permissions:

@php
    $old_permissions = \App\Models\UserRolePermission::where('user_role_id', $this->role_id)->pluck('permission_id')->toArray();
@endphp
            <div class="col-md-12">
                <div class="form-group">
                    <label class="display-block text-semibold">Select Permissions</label>
                    @foreach($permissions as $item)
                        <label class="checkbox-inline">
                            <input type="checkbox" wire:model="new_permissions" class="" value="{{ $item->id }}" {{ in_array($item->id, $old_permissions) ? "checked" : "" }}>
                            {{ $item->name }} </label>
                    @endforeach
                </div>
            </div>

Во втором методе мой код в источнике представления был правильным, старые были проверены в поле ввода, а новые — нет, но в представлении флажки не были отмечены.

См. также:  Сборка XCFramework с зависимостью от модуля
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. amitshrestha221

    Livewire использует строковое значение вместо числового.

    Чтобы исправить это, преобразуйте все целые числа в массиве $ old_permissions в строки вроде

    $old_permissions = \App\Models\UserRolePermission::where('user_role_id', $this->role_id)->pluck('permission_id')->->map(function ($permission_id) {
          return  strval($permission_id);
    })->toArray();
    

    Вот мое решение

    В поле зрения

    <div class="bg-white dark:bg-primary-900 rounded-md shadow mt-2 py-3 px-2">
        <h3 class="mb-2 text-gray-900 dark:text-gray-100 text-xl">Permissions</h3>
        <div class="grid grid-cols-12 gap-4">
            @foreach ($permissions as $permission)
                <div class="col-span-6 sm:col-span-4 md:col-span-3 flex items-center space-x-2">
                    <input wire:model="selectedPermissions" type="checkbox" value="{{ $permission->id }}"
                        class="w-4 h-4 transition text-primary duration-300 rounded focus:ring-2 focus:ring-offset-0 focus:outline-none focus:ring-primary-200 dark:focus:ring-primary-700">
                    <label class="text-sm font-semibold text-gray-500 dark:text-gray-100">
                        {{ ucwords($permission->display_name) }}
                    </label>
    
                </div>
            @endforeach
        </div>
    </div>
    

    В классе компонентов Livewire

    public $role;
    public $permissions;
    public $selectedPermissions = [];
    
    protected $listeners = ['eidtRole'];
    
    public function mount()
    {
        $this->permissions = Permission::get();
    }
    public function eidtRole(Role $role)
    {
        $this->role = $role;
        $this->selectedPermissions = $this->rolePermissions = $role->permissions()->pluck('id')->map(function ($id) {
        return strval($id);
        })->toArray();
    }
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: