Больше чем Laravel CMS

С момента релиза ORCHID, не менялся и не заявлял, что это супер система подходит для всего и вся. Нет, позиционировался он всегда как платформа для разработки сайтов.

Многие проекты можно уже спокойно делать на CMS, новостные порталы, блоги, интернет магазины и т.п. С этим ORCHID справляется на хорошем уровне. Но как оказалось достаточно мало людей делают “обычные” веб-сайты на Laravel (Наверное стоит дать ссылку, где я рассказывал о том, что это действительно дорого). Большинство делают уже целые системы со своей собственной логикой и требуется больший контроль.

Считаю, что уже пора начать реализацию и для построения нестандартной схемы приложения. В первую очередь это так или иначе бизнес-приложения которые требуют CRUD. Как эталон взял реализацию от компании Microsoft для десктоп приложений. Да да, всё что мы делали уже было раньше, но только не в вебе ;)

Введение в LightSwitch с выступления Microsoft TechDays

Суть реализации Microsoft заключался в разработке продукта Visual Studio LightSwitch — среды разработки, нацеленной на создание line-of-business приложений. В 2016 году заявили о прекращении поддержки из-за Silverlight и переноса всего в новый продукт PowerApps

Если таким продуктом в действительности мог пользоваться, даже человек без глубоких знаний разработки, то нам такой реализации достичь невозможно, но это и не является нашей целью. Почти все технические возможности уже существуют в Laravel или пользовательских реализаций. Мы сосредоточимся только на одном единственном, но очень важном компоненте — Screen.

Принцип построения “Экрана” и действий пользователя

Screen — это экран приложения, который отображает данные. Экраны основаны на предопределенных шаблонов (Layouts) и всё, что вам нужно сделать это привязать данные.

Layouts — это макет, лучшее объяснением будет, то чем он является:

  • Таблица (Table)
  • Колонки (Column)
  • Строки (Row)
  • Графики и т.п.

При этом каждый макет может включать в себя другой макет, то есть вложенность. Например экран делится двумя колонками, в левой поля для заполнения, справа справочная таблица и график. Вы можете придумать свои примеры вложения. Поля указываются точно так же как и в уже существующих “Behaviors”.

В экранах предусмотрены встроенные команды (Screen Command Bar), позволяющие пользователям выполнять методы различные методы.


Хватит теории покажи код!

Черновой вариант класса экрана выглядит так:

namespace App\Core\Screens;

use App\Core\Layout\TestRows;
use App\Core\Layout\TestTable;
use Illuminate\Http\Request;

class DemoScreen
{

/**
* Название экрана
*
*
@var string
*/
public $name = 'Advertising';

/**
* Описание экрана
*
*
@var string
*/
public $description = 'Demonstrative Advertising';


/**
* Запрос к базе данных
*
*
@return array
*/
public function query() : array
{
return [
'test' => 'test'
];
}

/**
* Кнопки экрана
*
*
@return array
*/
public function commandBar() : array
{
return [
'create' => [
'displayName' => 'Новая запись',
'description' => 'Создать новую запись',
'method' => 'create',
],
];
}

/**
* Макеты которые использую

*
*
@return array
*/
public function layout() : array
{
return [
TestRows::class,
TestTable::class,
];
}

/**
*
@param Request $request
*
*
@return null
*/
public function methodCreate(Request $request)
{
return null;
}

}

Вернувшееся значение запроса автоматически проходит через указанные макеты и строит View.


Что это даст?

В действительности это огромный шаг для платформы в целом, который позволит пользователям строить свои собственные отображения по своей логике и данными.

Реальные кейсы написанные по памяти:

Кейс #1

Я не хочу использовать встроенные классы записей и т.п. А имею сложную логику связанных запросов и мне требуется сгенерировать форму которую заполнит/изменит пользователь.

Кейс #2

Многие мои данные берутся из внешних источников MongoDB/API/VK и я хочу получить возможность изменять/показывать их вместе с данными.

Кейс #3

Моя панель администрирования служит ещё и личным кабинетом для клиентов компании и мне хотелось, что бы они видели страницу отображения (А не страницу редактирования) в которой я могу построить график их компании из ClickHouse и вывести общие данные

Кейс #4

Я имею несколько API которые не имеют средств визуального редактирования и хотел бы использовать ORCHID как панель администрирования всех данных API.

В действительности кейсов и запросов намного больше, но так или иначе всё они пересекаются, по этому мы будем решать общие задачи.

UPD:

Пример чернового кода:

Я не стал перечислять все Layouts которые наследуются, они так или иначе повторяются по своей сути с уже присутствующими.

Демо экран который мы сгенерировали

Стоит помнить, что это лишь черновой вариант, который обсуждается. Если у вас есть предложения или замечания, пожалуйста напишите мне, не стоит стеснятся ;)