ldc-laravel-base-project/app/Http/Middleware/HandleInertiaRequests.php
2025-03-10 11:42:15 +01:00

72 lines
2.3 KiB
PHP

<?php
namespace App\Http\Middleware;
use App\Models\User;
use Diglactic\Breadcrumbs\Breadcrumbs;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\Gate;
use Illuminate\Support\Facades\Session;
use Inertia\Middleware;
use Uwil\LaravelBackend\Enums\RoleEnum;
use Uwil\LaravelCommon\Enums\ItemsPerPaginationEnum;
class HandleInertiaRequests extends Middleware
{
/**
* The root template that is loaded on the first page visit.
*
* @var string
*/
protected $rootView = 'back/app';
/**
* Determine the current asset version.
*/
public function version(Request $request): ?string
{
return parent::version($request);
}
/**
* Define the props that are shared by default.
*
* @return array<string, mixed>
*/
public function share(Request $request): array
{
$locale = Session::get('lang') ?? config('app.fallback_locale');
app()->setLocale($locale);
// Get translations from translator app.
$translations = Cache::get(sprintf('translations_%s', $locale), function () {
$translator = App::make('translator');
$property = (new \ReflectionClass($translator))->getProperty('loaded');
$property->setAccessible(true);
return $property->getValue($translator);
});
$props = [
...parent::share($request),
'auth' => [
'user' => $request->user(),
'policies' => [
'users' => [
'viewAny' => Gate::allows('viewAny', User::class),
'create' => Gate::allows('create', User::class),
]
]
],
'enumItemsPerPagination' => ItemsPerPaginationEnum::toArray(),
'enumUserRole' => RoleEnum::toArray(),
'translations' => $translations,
'locale' => $locale,
];
if (Breadcrumbs::exists($request->route()->getName())) {
$props = array_merge($props, [
'breacrumbs' => Breadcrumbs::generate($request->route()->getName())->toArray()
]);
}
return $props;
}
}