coolify/app/Providers/AppServiceProvider.php

136 lines
3.2 KiB
PHP
Raw Normal View History

2023-03-17 14:33:48 +00:00
<?php
2025-03-17 16:45:49 +00:00
declare(strict_types=1);
2023-03-17 14:33:48 +00:00
namespace App\Providers;
2025-03-17 16:45:49 +00:00
use Carbon\CarbonImmutable;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Http\Client\RequestException;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Date;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Http;
2025-03-17 16:45:49 +00:00
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\Vite;
2023-03-17 14:33:48 +00:00
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Sleep;
2025-03-17 16:45:49 +00:00
use Illuminate\Validation\Rules\Password;
2023-03-17 14:33:48 +00:00
2025-03-17 16:45:49 +00:00
final class AppServiceProvider extends ServiceProvider
2023-03-17 14:33:48 +00:00
{
2025-11-30 15:50:04 +00:00
/**
* Register any application services.
*/
public function register(): void {}
/**
* Bootstrap any application services.
*/
2023-03-17 14:33:48 +00:00
public function boot(): void
{
2025-03-17 16:45:49 +00:00
$this->configureHttps();
$this->configurePasswordValidation();
$this->configureCommands();
$this->configureModels();
$this->configureDates();
$this->configureTests();
2025-03-17 16:45:49 +00:00
$this->configureRequestExceptions();
$this->configureVite();
}
/**
* Configure HTTPS for production.
*/
private function configureHttps(): void
{
if (App::isProduction() && (bool) config('app.force_https')) {
URL::forceScheme('https');
}
}
/**
* Configure password validation for production.
*/
private function configurePasswordValidation(): void
{
if (App::isProduction()) {
Password::defaults(fn () => Password::min(12)
->letters()
->mixedCase()
->numbers()
->symbols()
->uncompromised());
}
}
/**
* Configure commands for production.
*/
private function configureCommands(): void
{
if (App::isProduction()) {
DB::prohibitDestructiveCommands();
}
}
/**
* Configure models.
*/
private function configureModels(): void
{
Model::automaticallyEagerLoadRelationships();
2025-03-17 16:45:49 +00:00
if (! App::isProduction()) {
Model::preventLazyLoading();
}
Model::preventSilentlyDiscardingAttributes();
2025-03-17 16:45:49 +00:00
Model::preventAccessingMissingAttributes();
2025-03-17 16:45:49 +00:00
Model::unguard();
Relation::enforceMorphMap([
// Add you polymorphic relations here. For example:
// 'application' => \App\Models\Application::class,
]);
}
/**
* Configure dates.
*/
private function configureDates(): void
{
Date::use(CarbonImmutable::class);
}
/**
* Configure tests.
*/
private function configureTests(): void
{
if (App::runningUnitTests()) {
Sleep::fake();
Http::preventStrayRequests();
}
}
2025-03-17 16:45:49 +00:00
/**
* Configure request exceptions.
*/
private function configureRequestExceptions(): void
{
if (! App::isProduction()) {
RequestException::dontTruncate();
}
}
/**
* Configure Vite for better performance.
*/
private function configureVite(): void
{
Vite::useAggressivePrefetching();
2023-03-17 14:33:48 +00:00
}
}