app->singleton( AdminAuthService::class, function () { $guard = Auth::guard('backend'); return new AdminAuthService($guard); } ); $this->app->singleton( ProductDirectory::class, fn () => new EloquentProductDirectory() ); $this->app->singleton( RecipeDirectory::class, fn () => new EloquentRecipeDirectory() ); $this->requestMacro(); } public function boot(): void { $this->dateSetup(); $this->laravelGlobalSetup(); $this->registerSharedInertiaProps(); $this->registerModelsInBackendRegistry(); } private function laravelGlobalSetup(): void { Model::shouldBeStrict(app()->environment('local')); Vite::useCspNonce(); URL::forceScheme('https'); } private function registerSharedInertiaProps(): void { InertiaSharedRegistry::add('dynamicPages', function (): array { if (! Schema::hasTable('dynamic_pages')) { return []; } $dynamicPageModels = DynamicPage::getModelsCached() ->where('status', PageStatusEnum::published); $dynamicPages = []; foreach ($dynamicPageModels as $dynamicPageModel) { $pascalCase = str_replace(' ', '', ucwords(str_replace('-', ' ', $dynamicPageModel->id_key))); $dynamicPages["page{$pascalCase}"] = $dynamicPageModel; } return $dynamicPages; }); InertiaSharedRegistry::add('activitySectorEnum', fn () => ActivitySectorEnum::toArray()); InertiaSharedRegistry::add('objectEnum', fn () => ObjectEnum::toArray()); InertiaSharedRegistry::add('breedingMethodEnum', fn () => BreedingMethod::toArray()); InertiaSharedRegistry::add('businessEnum', fn () => Business::toArray()); InertiaSharedRegistry::add('productCategoryEnum', fn () => ProductCategory::toArray()); InertiaSharedRegistry::add('productFormatEnum', fn () => ProductFormat::toArray()); InertiaSharedRegistry::add('technologyEnum', fn () => Technology::toArray()); InertiaSharedRegistry::add('consumptionTimeEnum', fn () => ConsumptionTime::toArray()); InertiaSharedRegistry::add('inspirationEnum', fn () => Inspiration::toArray()); InertiaSharedRegistry::add('seasonEnum', fn () => Season::toArray()); } private function registerModelsInBackendRegistry(): void { ModelListRegistry::add( 2, 'products', trans_choice('models.classes.product', 1), 'name', ); ModelListRegistry::add( 3, 'recipes', trans_choice('models.classes.recipe', 1), 'name', ); } private function dateSetup(): void { foreach ([\LC_TIME, \LC_MESSAGES, \LC_COLLATE, \LC_CTYPE, \LC_MONETARY] as $constant) { setlocale( $constant, sprintf( '%s_%s.UTF-8', Config::string('app.locale'), strtoupper(Config::string('app.locale')) ) ); } Date::setLocale(Config::string('app.locale')); Date::setFallbackLocale(Config::string('app.fallback_locale')); } private function requestMacro(): void { Request::macro('pagination', function (int $defaultPageSize = 25): Pagination { /** @var \Illuminate\Http\Request $this */ if ($this->has('offset') || $this->has('limit')) { return Pagination::ofOffsetAndLimit( $this->integer('offset', 0), $this->integer('limit', $defaultPageSize) ); } return Pagination::ofPage( $this->integer('page', 1), $this->integer( 'per_page', // * Default laravel paginator name $this->integer('pagination', $defaultPageSize) ) ); }); } }