Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 07.01.2020 12:01:25

Повторное использование Form на нескольких страницах

Всем привет, подскажите пожалуйста, как вы решаете ситуацию, когда одна форма подходит для нескольких страниц? Допустим есть 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)

Не в сети

#2 07.01.2020 14:56:30

Re: Повторное использование Form на нескольких страницах

Я просто копирую шаблон. Тот случай, когда копи-паста это благо.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

#3 07.01.2020 17:01:32

Re: Повторное использование Form на нескольких страницах

Как насчет такого подхода?
Создаем базовый шаблон формы

//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

Не в сети

#4 07.01.2020 21:53:24

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Повторное использование Form на нескольких страницах

Вариант с компонентом возможно тут самый подходящий. Но если будет форм с отличающимся шаблоном (форма с табами к примеру), то придется либо опять компонент делать либо уже просто хтмл ее оставить.

Я для себя написал небольшой билдер (таблицы, формы, табы, чарты…), так как приходилось много проектов с идентичным функционалом делать

Не в сети

#5 07.01.2020 22:57:38

Re: Повторное использование Form на нескольких страницах

Как насчет такого подхода?

Это конечно хорошо, потому что достаточно в одном месте внести правку чтобы оно сработало везде. Но это усложнение. Мне нравится когда всё можно увидеть и понять сразу, когда отсутствует визуальный шум. Простые вещи просто поддерживать.

Истина где-то посередине.


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела