Не много не понял Ваших целей в создании на кастомных страниц списка категорий и создания модели. А станица редактирования данных тоже будет на кастомной? Или Вы хотите что бы страница списка была в виде дерева, с вложенностью?
Я использую Moonshine, в принципе можно сделать как Вы хотите, сделать кастомную страницу, на которой буде размещена форма для создания модели. Документация к Moonshine довольно подробная, и там хорошо, с примерами изложена информация о создании
кастомных страниц.
К примеру , используя кастомные страницы Moonshin создавал функционал экспорта, импорта данных, обновления курсов валют. Возможно на данном примере Вы сможете решить свою задачу.
1. В
app\Providers\MoonShineServiceProvider.php создаем пункт меню, ведущий на кастомную страницу админ панели.
MenuItem::make('Импорт товаров',
CustomPage::make('Excel import', 'product-import', 'admin.import.import_product', fn() => [])
)->icon('heroicons.document-arrow-down'),
Тут можно увидеть параметры:
- 'Excel import',< - заголовок кастомной страницы.
- 'product-import' - slug страницы для формирования url.
- 'admin.import.import_product', - blade шаблон view кастомной страницы, который как обычно располагается в resources/views.
- fn() => [] Функция cfllback – в данном случае пустая, так как нет необходимости в обработке и передаче данных во view.
2. Создаем blade шаблон кастомной страницы. В моем случае он находился
resources/views/'admin/import/import_product.blade.php. В данном шаблоне вы можете создать форму для создания элемента. Можно накидать свою, а можно использовать готовые
UI компоненты Moonshine
Пример blade шаблон кастомной страницы.
@if (session('status'))
<x-moonshine::alert type="success" removable="true">{{ session('status') }}</x-moonshine::alert>
@endif
@if (isset($errors) && $errors->any())
<x-moonshine::alert type="error">
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
</x-moonshine::alert>
@endif
<form action="{{route('import.product')}}" method="post" enctype="multipart/form-data">
@csrf
<div class="grid grid-cols-12 gap-6">
<div class="space-y-6 col-span-12 xl:col-span-6">
<div class="box">
<h2 class="box-title">Импорт данных товаров из EXCEL - файла</h2>
<div class="grid grid-cols-12 gap-6">
<div class="form-group space-y-6 col-span-12 xl:col-span-9" x-show="true" id="wrapper_">
<label class="form-label" for="file">
Excel файл
</label>
<div class="form-group form-group-dropzone">
<input class="form-input form-file-upload" type="file" name="file" accept="*/*">
</div>
</div>
</div>
</div>
</div>
</div>
<div class="space-y-6 col-span-12 xl:col-span-12">
<div class="mt-3 flex w-full flex-wrap justify-start gap-2">
<button type="submit" class="btn btn-primary form_submit_button">Отправить</button>
</div>
</div>
</form>
2. Action – ссылка формы ведет на контроллер, точнее метод обработчик – создания модели. Создаем роут для ссылки
Route::post('/moonshine/product-import', [App\Http\Controllers\Admin\Import\ImportController::class, 'importProduct'])->name('import.product');
4. Создать конроллер и соответствующий метод для валидации и сохранения данных из формы.
А вообще MoonShine имеет довольно большое и дружелюбное комьюнити, где сами разработчики и опытные пользователи быстро помогаю решать различные задачи, дают советы и отвечаю на вопросы. Тут можно получить ответы на вопросы связанные с MoonShine - t.me/laravel_chat
P.S