castopod/app/Controllers/PageController.php

52 lines
1.2 KiB
PHP

<?php
/**
* @copyright 2020 Podlibre
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
namespace App\Controllers;
use App\Entities\Page;
use App\Models\PageModel;
use CodeIgniter\Exceptions\PageNotFoundException;
class PageController extends BaseController
{
protected Page $page;
public function _remap(string $method, string ...$params): mixed
{
if (count($params) === 0) {
throw PageNotFoundException::forPageNotFound();
}
if (
$this->page = (new PageModel())->where('slug', $params[0])->first()
) {
return $this->{$method}();
}
throw PageNotFoundException::forPageNotFound();
}
public function index(): string
{
$cacheName = "page-{$this->page->slug}";
if (! ($found = cache($cacheName))) {
$data = [
'page' => $this->page,
];
$found = view('page', $data);
// The page cache is set to a decade so it is deleted manually upon page update
cache()
->save($cacheName, $found, DECADE);
}
return $found;
}
}