#laravel-backpack
Вопрос:
Я создал пользовательскую страницу в панели администратора рюкзака. Эта страница не является грубой (не связана ни с какой моделью). На нем есть несколько форм с выбором даты, выбором входных данных и т. Д. Поэтому я пытаюсь найти способ использовать поля рюкзака для создания этих средств выбора дат и выбора входных данных. Потому что кажется неудобным встраивать пользовательские js-элементы управления в проект, так как в Backpack уже есть соответствующие поля.
Единственное решение, которое я придумал, — это создать контроллер crud для случайной модели, отключить все операции, кроме создания, использовать представление «Создать операцию» в качестве пользовательской страницы (таким образом доступны поля рюкзака) и, наконец, переопределить метод store () — чтобы предотвратить создание новой записи модели в БД.
Итак, есть ли правильный способ доступа к полям рюкзака на пользовательской (не CRUD) странице?
Ответ №1:
Поля Backpack 4.x не предназначены для использования за пределами CRUD, но вы можете это сделать.
Вариант А
По своей сути поля рюкзака являются просто видами лезвий, поэтому вы можете загрузить их с помощью помощника по лезвиям @include()
. Просто убедитесь, что передали все переменные, необходимые для файла блейда. Я верю в 99% полей, которые будут $field
$crud
переменными, поэтому это будет работать:
@php
// set the CRUD model to something (anything)
// but ideally it'd be the model of the entity that has the form
$crud = app()->make('crud');
$crud->setModel(AppModelsMonster::class);
@endphp
@include('crud::fields.number', [
'crud' => $crud,
'field' => [
'name' => 'price',
'label' => 'Price',
'prefix' => '
Таким образом, вы загружаете только те биты, которые вам действительно нужны (входные данные), без накладных расходов на CrudController. Вы можете указать форму на свой пользовательский контроллер и сохранить ее самостоятельно. То, что вам нужно передать для $field
приведенного выше, - это определение поля рюкзака в форме массива.
Этот способ очень прост, но у него есть большой недостаток, если вы спросите меня. Определение поля должно быть на 100% правильным и полным, вы теряете всю магию и логику предположений, которые обычно делает Рюкзак, чтобы облегчить вашу жизнь, когда вы добавляете поле с помощью addField()
. Вот почему в большинстве случаев я думаю, что удобнее выбрать вариант B.
Вариант В
Вместо того, чтобы вручную загружать все поля каждого вида , добавьте их с помощью addField()
, а затем загрузите их все так же, как это делает Backpack в операции создания или обновления:
@php
$crud = app()->make('crud');
$crud->setModel(AppModelsMonster::class);
$crud->addField([
'name' => 'price',
'label' => 'Price',
'prefix' => '
Вышеизложенное приведет к такому результату:
Преимущество этого второго варианта заключается в том, что вы можете "забыть" упомянуть что-либо в определении поля, и Рюкзак примет это, вы можете использовать свободный синтаксис, вы действительно можете использовать большинство функций рюкзака...
]
])
Таким образом, вы загружаете только те биты, которые вам действительно нужны (входные данные), без накладных расходов на CrudController. Вы можете указать форму на свой пользовательский контроллер и сохранить ее самостоятельно. То, что вам нужно передать для $field
приведенного выше, - это определение поля рюкзака в форме массива.
Этот способ очень прост, но у него есть большой недостаток, если вы спросите меня. Определение поля должно быть на 100% правильным и полным, вы теряете всю магию и логику предположений, которые обычно делает Рюкзак, чтобы облегчить вашу жизнь, когда вы добавляете поле с помощью addField()
. Вот почему в большинстве случаев я думаю, что удобнее выбрать вариант B.
Вариант В
Вместо того, чтобы вручную загружать все поля каждого вида , добавьте их с помощью addField()
, а затем загрузите их все так же, как это делает Backpack в операции создания или обновления:
Вышеизложенное приведет к такому результату:
Преимущество этого второго варианта заключается в том, что вы можете "забыть" упомянуть что-либо в определении поля, и Рюкзак примет это, вы можете использовать свободный синтаксис, вы действительно можете использовать большинство функций рюкзака...
]);
@endphp
<form method="post">
@include('crud::form_content', [ 'fields' => $crud->fields(), 'action' => 'create' ])
</form>
Вышеизложенное приведет к такому результату:
Преимущество этого второго варианта заключается в том, что вы можете «забыть» упомянуть что-либо в определении поля, и Рюкзак примет это, вы можете использовать свободный синтаксис, вы действительно можете использовать большинство функций рюкзака…
]
])
Таким образом, вы загружаете только те биты, которые вам действительно нужны (входные данные), без накладных расходов на CrudController. Вы можете указать форму на свой пользовательский контроллер и сохранить ее самостоятельно. То, что вам нужно передать для $field
приведенного выше, — это определение поля рюкзака в форме массива.
Этот способ очень прост, но у него есть большой недостаток, если вы спросите меня. Определение поля должно быть на 100% правильным и полным, вы теряете всю магию и логику предположений, которые обычно делает Рюкзак, чтобы облегчить вашу жизнь, когда вы добавляете поле с помощью addField()
. Вот почему в большинстве случаев я думаю, что удобнее выбрать вариант B.
Вариант В
Вместо того, чтобы вручную загружать все поля каждого вида , добавьте их с помощью addField()
, а затем загрузите их все так же, как это делает Backpack в операции создания или обновления:
Вышеизложенное приведет к такому результату:
Преимущество этого второго варианта заключается в том, что вы можете «забыть» упомянуть что-либо в определении поля, и Рюкзак примет это, вы можете использовать свободный синтаксис, вы действительно можете использовать большинство функций рюкзака…