dbms_primeidc/extdbms/lib/Core/Controller.php
2025-04-25 19:15:31 +09:00

78 lines
2.5 KiB
PHP

<?php
namespace lib\Core;
use lib\Core\Logger;
use lib\Core\Http\Redirect;
use lib\Core\Http\Request;
use lib\Core\Http\Session;
use lib\Core\Http\Response;
abstract class Controller
{
protected ?View $_view = null;
protected ?Request $request = null;
protected ?Session $session = null;
protected ?Redirect $redirect = null;
protected ?Logger $logger = null;
protected function __construct(array $params = [])
{
if (APP_DEBUG) {
error_reporting(E_ALL);
ini_set('display_errors', '1');
} else {
error_reporting(0);
ini_set('display_errors', '0');
}
$this->request = new Request($params);
$this->session = new Session();
$this->redirect = new Redirect($this->session);
$this->logger = new Logger();
$this->_view = new View();
$this->_view->request = $this->request;
$this->_view->session = $this->session;
$this->_view->redirect = $this->redirect;
$this->_view->logger = $this->logger;
$this->session->set('_previous_url', $this->request->currentUrl());
} //
final public function __get($name): mixed
{
return $this->_view->$name;
}
final public function __set($name, $value): void
{
$this->_view->$name = $value;
}
final public function __call($name, $arguments)
{
if (method_exists($this, $name)) {
return call_user_func_array([$this, $name], $arguments);
}
throw new \BadMethodCallException("Method {$name} does not exist.");
} //
final public function setLayout(string $file): void
{
$this->_view->setLayout($file);
}
final public function setPath(string $path): void
{
$this->_view->setPath($path);
}
public function render(string $file): Response
{
// if (empty($file)) {
// throw new \InvalidArgumentException("File name cannot be empty.");
// }
// $this->_view->setFile($file);
// $this->_view->setLayout($this->layout);
// $this->_view->setPath($this->path);
// $this->_view->setParams($this->params);
// $this->_view->setUrl($this->url);
// $this->_view->setRequest($this->request);
// $this->_view->setSession($this->session);
// $this->_view->setRedirect($this->redirect);
// $this->_view->setLogger($this->logger);
return new Response($this->_view->render($file), 200, ['Content-Type' => 'text/html']);
}
} //Class