Files
mtdb_movie/app/Http/Controllers/FallbackRouteController.php
maher 703f50a09d
Some checks failed
Build / run (push) Has been cancelled
first commit
2025-10-29 11:42:25 +01:00

63 lines
1.9 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers;
use App\Models\Channel;
use Common\Channels\ChannelController;
use Common\Core\Controllers\HomeController;
use Illuminate\Database\Eloquent\ModelNotFoundException;
class FallbackRouteController
{
static array $defaultRoutes = ['lists', 'titles', 'search', 'news', 'user'];
public function __invoke(string $path)
{
$parts = explode('/', $path);
if (
count($parts) > 2 ||
count($parts) < 1 ||
(count($parts) === 1 && in_array($parts[0], self::$defaultRoutes))
) {
return $this->renderClient();
}
// first try to match a channel, if none is found, fallback to rendering client side app
try {
if ($parts[0] === 'lists' && isset($parts[1])) {
request()->merge(['channelType' => 'list']);
$parts[0] = $parts[1];
$parts[1] = null;
}
if ($parts[0] === 'channel' && isset($parts[1])) {
$parts[0] = $parts[1];
$parts[1] = null;
}
$slugOrId = $parts[0];
$restriction = $parts[1] ?? null;
return $this->renderChannel($slugOrId, $restriction);
} catch (ModelNotFoundException) {
return $this->renderClient();
}
}
public function renderChannel(string $slugOrId, ?string $restriction = null)
{
$channel = app(Channel::class)->resolveRouteBinding($slugOrId);
if ($restriction) {
request()->merge(['restriction' => $restriction]);
}
return app(ChannelController::class)->show($channel);
}
public function renderClient()
{
// no need to prerender channels here, use base HomeController
request()->route()->action['uses'] = HomeController::class . '@show';
return app(HomeController::class)->show();
}
}