[CORE] Add functionality to App\Core\Controller to get and validate GET parameters

This commit is contained in:
Hugo Sales 2021-04-15 22:33:37 +00:00
parent c053e8da8e
commit 0d01f1d060
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0

View File

@ -37,6 +37,7 @@ use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\RequestStack;
use Symfony\Component\HttpKernel\Event\ControllerEvent;
use Symfony\Component\HttpKernel\Event\ExceptionEvent;
use Symfony\Component\HttpKernel\Event\ViewEvent;
@ -44,12 +45,19 @@ use Symfony\Component\HttpKernel\KernelEvents;
class Controller extends AbstractController implements EventSubscriberInterface
{
private array $vars = [];
private array $vars = [];
private ?Request $request = null;
public function __construct(RequestStack $requestStack)
{
$this->request = $requestStack->getCurrentRequest();
}
public function __invoke(Request $request)
{
$class = get_called_class();
$method = 'on' . ucfirst(strtolower($request->getMethod()));
$this->request = $request;
$class = get_called_class();
$method = 'on' . ucfirst(strtolower($request->getMethod()));
if (method_exists($class, $method)) {
return $class::$method($request, $this->vars);
} else {
@ -65,7 +73,8 @@ class Controller extends AbstractController implements EventSubscriberInterface
$controller = $event->getController();
$request = $event->getRequest();
$this->vars = ['controler' => $controller, 'request' => $request, 'have_user' => Common::user() !== null];
$this->request = $request;
$this->vars = ['controler' => $controller, 'request' => $request, 'have_user' => Common::user() !== null];
Event::handle('StartTwigPopulateVars', [&$this->vars]);
$event->stopPropagation();
@ -131,4 +140,26 @@ class Controller extends AbstractController implements EventSubscriberInterface
KernelEvents::VIEW => 'onKernelView',
];
}
/**
* Get and convert GET parameters. Can be called with `int`, `bool`, etc
*
* @param string $name
*
* @throws ValidatorException
*/
public function __call(string $method, array $args)
{
$name = $args[0];
$value = $this->request->query->get($name);
switch ($method) {
case 'int':
return (int) $value;
case 'bool':
return (bool) $value;
default:
Log::critical($m = "Method '{$method}' on class App\\Core\\Controller not found (__call)");
throw new \Exception($m);
}
}
}