Экран админки

<?php

namespace App\Http\Controllers\Admin\Screens;

use Wtolk\Crud\Form\Checkbox;

use Wtolk\Crud\Form\Column;

use Wtolk\Crud\Form\DateTime;

use Wtolk\Crud\Form\File;

use Wtolk\Crud\Form\Link;

use Wtolk\Crud\Form\MultiFile;

use Wtolk\Crud\Form\Summernote;

use Wtolk\Crud\Form\TableField;

use Wtolk\Crud\FormPresenter;

use App\Models\Adfm\Page;

use Wtolk\Crud\Form\Input;

use Wtolk\Crud\Form\Button;

class PageScreen

{

 public $form;

 public $request;

 public function __construct()

 {

 $this->form = new FormPresenter();

 $this->request = request();

 }

 public static function index()

 {

 $screen = new self();

 $screen->form->template('table-list'); // Объявляем шаблон страницы с таблицей

 	$screen->form->source([

 'pages' => Page::filter(request()->input('filter'))->paginate(50) // Задаем модели для экрана

 ]);

 $screen->form->title = 'Страницы'; // Заголовок экрана

 $screen->form->addField(

 TableField::make('title', 'Название страницы')

 ->link(function ($model) {

 echo Link::make($model->ru_title)->route('adfm.pages.edit', ['id' => $model->id])

 ->render();

 })

 );

 $screen->form->addField(TableField::make('created_at', 'Дата создания'));

 $screen->form->addField(

 TableField::make('', '')

 ->link(function ($model) {

 echo Link::make('Удалить')->route('adfm.pages.destroy', ['id' => $model->id])->render();

 })

 );

 $screen->form->addField(

 TableField::make('', '')

 ->link(function ($model) {

 echo Link::make('Просмотр')->route('adfm.show.page', ['slug' => $model->slug])->render();

 })

 );

 $screen->form->filters(self::getFilters()); // Объявляем поля по которым будем фильтровать таблицу

 $screen->form->buttons([ // Кнопки на экране

 Link::make('Добавить')->class('button')->icon('note')->route('adfm.pages.create')

 ]);

 $screen->form->build();

 $screen->form->render();

 }

 public static function create()

 {

 $screen = new self();

 $screen->form->isModelExists = false;

 $screen->form->template('form-edit')->source([

 'page' => new Page()

 ]);

 $screen->form->title = 'Создание страницы';

 $screen->form->route = route('adfm.pages.store');

 $screen->form->columns = self::getFields(); // В свойство поля передаем метод, в котором возвращаем список полей 

 $screen->form->buttons([

 Button::make('Сохранить')->icon('save')->route('adfm.pages.update')->submit(),

 ]);

 $screen->form->build();

 $screen->form->render();

 }

 public static function edit()

 {

 $screen = new self();

 $screen->form->isModelExists = true;

 $screen->form->template('form-edit')->source([

 'page' => Page::findOrFail($screen->request->route('id'))

 ]);

 $screen->form->title = 'Редактирование страницы';

 $screen->form->route = route('adfm.pages.update', $screen->form->source['page']->id);

 $screen->form->columns = self::getFields();

 $screen->form->buttons([

 Button::make('Сохранить')->icon('save')->route('adfm.pages.update')->submit(),

 Button::make('Удалить')->icon('trash')->route('adfm.pages.destroy')->canSee($screen->form->isModelExists),

 Link::make('Добавить в меню')->icon('trash')

 ->route('adfm.menuitems.createFromModel', [

 'model_name' => 'Page',

 'model_id' => $screen->request->route('id'),

 'menu_id' => '0',

 ])->canSee($screen->form->isModelExists)

 ]);

 $screen->form->build();

 $screen->form->render();

 }

 public static function getFilters() {

 return [

 Input::make('filter.title:like')->title('Заголовок страницы')->setFilter(),

 Input::make('filter.content:like')->title('Текст страницы')->setFilter(),

 ];

 }

 public static function getFields() {

 return [

 Column::make([

 Input::make('page.ru_title')

 ->title('Заголовок на русском')

 ->required(),

 Input::make('page.title')

 ->title('Заголовок на английском')

 ->required(),

 Summernote::make('page.ru_content')->title('Содержимое на русском')->devMode($dev_mode),

 Summernote::make('page.content')->title('Содержимое на английском')->devMode($dev_mode),

 MultiFile::make('page.files')->title('Прикрепленные документы')

 ]),

 Column::make([

 Input::make('page.slug')

 ->title('Вид в адресной строке'),

 Input::make('page.meta.title')

 ->title('TITLE (мета-тег)'),

 Input::make('page.meta.description')

 ->title('Description (мета-тег)'),

 ])->class('col col-md-4')

 ];

 }

}

