Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Всем привет, подскажите пожалуйста, как вы решаете ситуацию, когда одна форма подходит для нескольких страниц? Допустим есть 3 таблицы:
pages
id, title, description, text, parent_id, type
articles
id, title, description, text, category_id
categories
id, title, description, text, parent_id
Как видим, формы для редактирования и создания записей в этих таблицах совпадают, за небольшим исключением. Т.е смысла для каждой таблицы создавать новую форму нет. Можно создать 1 форму с полями id, title, description, text и на странице подключения формы добавлять недостающие поля и action.
Как это сделать я понимаю, но меня интересует именно Laravel Best Practices, чтобы не создавать костыли. Я изучаю этот фреймворк буквально 2 дня и со всеми нюансами еще не знаком. Спасибо заранее.
Изменено chelovek (07.01.2020 12:02:30)
Не в сети
Я просто копирую шаблон. Тот случай, когда копи-паста это благо.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Как насчет такого подхода?
Создаем базовый шаблон формы
//views/components/form/template.blade.php
{{ Form::open(['url' => $action]) }}
{{ Form::label('title', 'Название') }}
{{ Form::text('title', null) }}
<br>
{{ Form::label('description', 'Описание') }}
{{ Form::text('description', null) }}
<br>
{{ Form::label('text', 'Текст') }}
{{ Form::textarea('text', null) }}
<br>
{{ $other_fields }}
<br>
{{ Form::submit('Отправить') }}
{{ Form::close() }}
На конкретных страницах вызываем этот шаблон и передаем ей нужные значения
// page-create.blade.php
@component('components.form.template', ['action' => app()->url('page-create')])
@slot('other_fields')
{{ Form::label('parent_id', 'Родитель') }}
{{ Form::text('parent_id', null) }}
<br>
{{ Form::label('type', 'Тип страницы') }}
{{ Form::text('type', null) }}
@endslot
@endcomponent
// article-create.blade.php
@component('components.form.template', ['action' => app()->url('article-create')])
@slot('other_fields')
{{ Form::label('category_id', 'Категория') }}
{{ Form::text('category_id', null) }}
@endslot
@endcomponent
// category-create.blade.php
@component('components.form.template', ['action' => app()->url('category-create')])
@slot('other_fields')
{{ Form::label('parent_id', 'Родитель') }}
{{ Form::text('parent_id', null) }}
@endslot
@endcomponent
Не в сети
Вариант с компонентом возможно тут самый подходящий. Но если будет форм с отличающимся шаблоном (форма с табами к примеру), то придется либо опять компонент делать либо уже просто хтмл ее оставить.
Я для себя написал небольшой билдер (таблицы, формы, табы, чарты…), так как приходилось много проектов с идентичным функционалом делать
Не в сети
Как насчет такого подхода?
Это конечно хорошо, потому что достаточно в одном месте внести правку чтобы оно сработало везде. Но это усложнение. Мне нравится когда всё можно увидеть и понять сразу, когда отсутствует визуальный шум. Простые вещи просто поддерживать.
Истина где-то посередине.
There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.
Не в сети
Страницы 1