[CORE][Controller] Make Controller abstract, handle an optional non static method and use static::class rather than get_called_class

This commit is contained in:
Hugo Sales 2021-09-27 10:36:48 +01:00
parent 4fef97f930
commit 2d8b220e92
Signed by: someonewithpc
GPG Key ID: 7D0C7EAFC9D835A0

View File

@ -51,8 +51,9 @@ use Symfony\Component\Validator\Exception\ValidatorException;
* @method int int(string $param) * @method int int(string $param)
* @method bool bool(string $param) * @method bool bool(string $param)
* @method string string(string $param) * @method string string(string $param)
* @method mixed handle(Request $request, mixed ...$extra)
*/ */
class Controller extends AbstractController implements EventSubscriberInterface abstract class Controller extends AbstractController implements EventSubscriberInterface
{ {
private array $vars = []; private array $vars = [];
protected ?Request $request = null; protected ?Request $request = null;
@ -70,13 +71,13 @@ class Controller extends AbstractController implements EventSubscriberInterface
public function __invoke(Request $request) public function __invoke(Request $request)
{ {
$this->request = $request; $this->request = $request;
$class = get_called_class(); $class = static::class;
$method = 'on' . ucfirst(strtolower($request->getMethod())); $method = 'on' . ucfirst(strtolower($request->getMethod()));
$attributes = array_diff_key($request->attributes->get('_route_params'), array_flip(['_format', '_fragment', '_locale', 'template', 'accept'])); $attributes = array_diff_key($request->attributes->get('_route_params'), array_flip(['_format', '_fragment', '_locale', 'template', 'accept', 'is_system_path']));
if (method_exists($class, $method)) { if (method_exists($class, $method)) {
return $class::$method($request, ...$attributes); return $this->{$method}($request, ...$attributes);
} else { } else {
return $class::handle($request, ...$attributes); return $this->handle($request, ...$attributes);
} }
} }