Backpack CRUD Controller: показывать поля в зависимости от модели редактируемой - PullRequest
1 голос
/ 30 апреля 2019

Можно ли настроить CRUD Controller таким образом, чтобы отображать поля в зависимости от модели, которую редактирует?

Пример: у меня есть модель с полями: id, type, field1, field2.

Для моделей с type=type1 Я хочу показать только field1:

$this->crud->addFields([
    ['name' => 'field1', 'label' => 'field1 label']
]);

для моделей с type=type2 только field2:

$this->crud->addFields([
    ['name' => 'field2', 'label' => 'field2 label']
]);

для моделей с type=type3 и field1 и field2:

$this->crud->addFields([
    ['name' => 'field1', 'label' => 'field1 label'],
    ['name' => 'field2', 'label' => 'field2 label']
]);

1 Ответ

2 голосов
/ 05 мая 2019

В самом низу этой страницы в документах перечислены:

Внутри вашего пользовательского типа поля вы можете использовать следующие переменные:

...

$ entry - в операции Update текущая запись изменяется (фактические значения);

Один из способов добиться этого - использовать настраиваемые поля и использовать это$entry переменная.Например, вы можете сделать 2 пользовательских поля, например:

field1.blade.php

@if(in_array($entry->type, ['type1','type3']))
    {{--  your field content here, see resources/views/vendor/backpack/crud/fields/text.blade.php as an example --}}
@endif

field2.blade.php

@if(in_array($entry->type, ['type2','type3']))
    {{--  you can even pull in the content of an existing field like this  --}}
    @include('crud::fields.text')
@endif

Затем в контроллере вы всегда добавляете оба поля и позволяете самим полям скрывать нужные поля.

 $this->crud->addFields([
        [
            'name' => 'field1', 
            'label' => 'field1 label',
            'type'  => 'field1',
        ],
        [
            'name' => 'field2', 
            'label' => 'field2 label',
            'type'  => 'field2',
        ]
    ]);
...