From c8224d24550028e10d01a79e8e82e41d90a73a40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B0=D1=88=D0=B5=20=D0=98=D0=BC=D1=8F?= Date: Mon, 28 Jul 2025 14:25:57 +0500 Subject: [PATCH] up --- app/Models/Factory.php | 21 +++++ app/Models/Pages/Factory.php | 31 ++++++++ app/Models/Pages/MainInfo.php | 41 ++++++++++ app/Models/User.php | 48 ------------ app/Providers/AppServiceProvider.php | 8 ++ database/migrations/main_info.php | 31 ++++++++ modules/ModulesProvider.php | 12 ++- modules/Objects/Factory.php | 22 ++++++ modules/Objects/MainInfo.php | 49 ++++++++++++ resources/views/example.blade.php | 112 +++++++++++++++++++++++++++ routes/web.php | 5 +- 11 files changed, 330 insertions(+), 50 deletions(-) create mode 100644 app/Models/Factory.php create mode 100644 app/Models/Pages/Factory.php create mode 100644 app/Models/Pages/MainInfo.php delete mode 100644 app/Models/User.php create mode 100644 database/migrations/main_info.php create mode 100644 modules/Objects/Factory.php create mode 100644 modules/Objects/MainInfo.php create mode 100644 resources/views/example.blade.php diff --git a/app/Models/Factory.php b/app/Models/Factory.php new file mode 100644 index 0000000..5e71faa --- /dev/null +++ b/app/Models/Factory.php @@ -0,0 +1,21 @@ +pagesFactory) { + return $this->pagesFactory; + } + $this->pagesFactory = new PagesFactory(); + $this->pagesFactory->setModelsFactory($this); + return $this->pagesFactory; + } +} diff --git a/app/Models/Pages/Factory.php b/app/Models/Pages/Factory.php new file mode 100644 index 0000000..dbcbf4f --- /dev/null +++ b/app/Models/Pages/Factory.php @@ -0,0 +1,31 @@ +modelsFactory = $factory; + } + + public function createMainInfoPage(): MainInfo + { + $page = new MainInfo; + /** @var ModulesProvider */ + $modulesProvider = app()->get(AppServiceProvider::ADMIN_MODULES); + $itemsStorage = $modulesProvider->getJsonObjectsFactory()->getInfrastructureFactory()->getStorage(); + $page->setItemsStorage($itemsStorage); + $itemFactory = $modulesProvider->getJsonObjectsFactory()->getDtoFactory()->getItemFactory(); + $page->setItemFactory($itemFactory); + $page->init(); + return $page; + } +} diff --git a/app/Models/Pages/MainInfo.php b/app/Models/Pages/MainInfo.php new file mode 100644 index 0000000..358617f --- /dev/null +++ b/app/Models/Pages/MainInfo.php @@ -0,0 +1,41 @@ +itemsStorage = $storage; + } + + public function setItemFactory(IItemFactory $factory): void + { + $this->itemFactory = $factory; + } + + public function init(): void + { + $mainInfoData = $this->itemsStorage->getByKey('main_info'); + $mainInfo = $this->itemFactory->createResource(); + $mainInfo->load($mainInfoData); + $this->mainInfoObject = $mainInfo->getObject(); + } + + public function getMainInfo(): MainInfoObject + { + return $this->mainInfoObject; + } +} diff --git a/app/Models/User.php b/app/Models/User.php deleted file mode 100644 index 749c7b7..0000000 --- a/app/Models/User.php +++ /dev/null @@ -1,48 +0,0 @@ - */ - use HasFactory, Notifiable; - - /** - * The attributes that are mass assignable. - * - * @var list - */ - protected $fillable = [ - 'name', - 'email', - 'password', - ]; - - /** - * The attributes that should be hidden for serialization. - * - * @var list - */ - protected $hidden = [ - 'password', - 'remember_token', - ]; - - /** - * Get the attributes that should be cast. - * - * @return array - */ - protected function casts(): array - { - return [ - 'email_verified_at' => 'datetime', - 'password' => 'hashed', - ]; - } -} diff --git a/app/Providers/AppServiceProvider.php b/app/Providers/AppServiceProvider.php index d0f849f..ff4bf4d 100644 --- a/app/Providers/AppServiceProvider.php +++ b/app/Providers/AppServiceProvider.php @@ -4,11 +4,14 @@ namespace App\Providers; use Illuminate\Support\ServiceProvider; use Modules\ModulesProvider as AdminModulesProvider; +use App\Models\Factory as ModelsFactory; class AppServiceProvider extends ServiceProvider { const ADMIN_MODULES = 'admin_modules'; + const MODELS_FACTORY = 'models-factory'; + /** * Register any application services. */ @@ -28,5 +31,10 @@ class AppServiceProvider extends ServiceProvider $provider->init(); return $provider; }); + + $this->app->singleton(self::MODELS_FACTORY, function ($app) { + $factory = new ModelsFactory(); + return $factory; + }); } } diff --git a/database/migrations/main_info.php b/database/migrations/main_info.php new file mode 100644 index 0000000..83d5129 --- /dev/null +++ b/database/migrations/main_info.php @@ -0,0 +1,31 @@ +getJsonObjectsFactory(); + $item = $factory->getDtoFactory()->getItemFactory()->createPersist(\Modules\Objects\MainInfo::TYPE); + $item->load(['key' => 'main_info', 'name' => 'Main info', 'disabled' => 1]); + + $attrs = $item->getInsertAttrs(); + DB::table('json_items')->insert($attrs); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + DB::table('json_items')->where('key', '=', 'main_info')->delete(); + } +}; diff --git a/modules/ModulesProvider.php b/modules/ModulesProvider.php index 10adc27..e68ef52 100644 --- a/modules/ModulesProvider.php +++ b/modules/ModulesProvider.php @@ -3,5 +3,15 @@ namespace Modules; use Src\ModulesProvider as BaseProvider; +use Modules\Objects\Factory as ObjectsFactory; +use Src\Modules\JsonObjects\Interfaces\IFactory as IJSONFactory; -class ModulesProvider extends BaseProvider {} +class ModulesProvider extends BaseProvider +{ + + public function init(array $conf = []): void + { + $conf['jsonObjects']['settings'][IJSONFactory::OBJECTS_FACTORY] = new ObjectsFactory; + parent::init($conf); + } +} diff --git a/modules/Objects/Factory.php b/modules/Objects/Factory.php new file mode 100644 index 0000000..033184a --- /dev/null +++ b/modules/Objects/Factory.php @@ -0,0 +1,22 @@ +setFieldsFactory($this); + $object->init(); + return $object; + } + return parent::createObjectField($type); + } +} diff --git a/modules/Objects/MainInfo.php b/modules/Objects/MainInfo.php new file mode 100644 index 0000000..eb009a4 --- /dev/null +++ b/modules/Objects/MainInfo.php @@ -0,0 +1,49 @@ +type = self::TYPE; + $this->description = 'Main info'; + + /** @var ImageObject */ + $image = $this->fieldsFactory->createObjectField(AbstractComposite::IMAGE_TYPE); + $image->setDescriptionStr('Image'); + $image->setAR(400 / 500); + $image->setPath('/files-browser'); + $this->fields['image'] = $image; + + /** @var StringObject */ + $h1 = $this->fieldsFactory->createObjectField(AbstractComposite::STRING_TYPE); + $h1->setDescriptionStr('H1'); + $this->fields['h1'] = $h1; + + /** @var StringObject */ + $subtitle = $this->fieldsFactory->createObjectField(AbstractComposite::STRING_TYPE); + $subtitle->setDescriptionStr('subtitle'); + $this->fields['subtitle'] = $subtitle; + + /** @var TextObject */ + $text = $this->fieldsFactory->createObjectField(AbstractComposite::HTML_TYPE); + $text->setDescriptionStr('text'); + $this->fields['text'] = $text; + } + + public function getField(string $field): ?string + { + /** @var ImageObject */ + $f = $this->fields[$field]; + return $f->getValue(); + } +} diff --git a/resources/views/example.blade.php b/resources/views/example.blade.php new file mode 100644 index 0000000..4e6d57a --- /dev/null +++ b/resources/views/example.blade.php @@ -0,0 +1,112 @@ + + + + + + Сайт-визитка + + + +
+
+

{{ $page->getMainInfo()->getField('h1') }}

+

{{ $page->getMainInfo()->getField('subtitle') }}

+
+ +
+
+ Мое фото +
+ +
+ {!! $page->getMainInfo()->getField('text') !!} +
+
+ + +
+ + \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index f3e01fc..8bc2e53 100644 --- a/routes/web.php +++ b/routes/web.php @@ -16,5 +16,8 @@ Route::group(['middleware' => [UsersProviderMiddleware::class, AuthMiddleware::c }); Route::get('/', function () { - return view('welcome'); + /** @var \App\Models\Factory */ + $factory = app()->get(\App\Providers\AppServiceProvider::MODELS_FACTORY); + $page = $factory->getPagesFactory()->createMainInfoPage(); + return view('example', ['page' => $page]); })->name('home');