. // }}} /** * Base class for controllers * * @package GNUsocial * @category Controller * * @author Hugo Sales * @copyright 2020 Free Software Foundation, Inc http://www.fsf.org * @license https://www.gnu.org/licenses/agpl.html GNU AGPL v3 or later */ namespace App\Core; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\JsonResponse; use Symfony\Component\HttpFoundation\Request; class Controller extends AbstractController { public function __invoke(Request $request) { $class = get_called_class(); $method = 'on' . ucfirst(strtolower($request->getMethod())); $vars = ['request' => $request]; Event::handle('StartTwigPopulateVars', [&$vars]); if (method_exists($class, $method)) { $vars = array_merge_recursive($vars, $class::$method($request, $vars)); } else { $vars = array_merge_recursive($vars, $class::handle($request, $vars)); } Event::handle('EndTwigPopulateVars', [&$vars]); $template = $vars['_template']; unset($vars['_template'], $vars['request']); // Respond in the the most preffered acceptable content type $format = $request->getFormat($request->getAcceptableContentTypes()[0]); switch ($format) { case 'html': return $this->render($template, $vars); case 'json': return new JsonResponse($vars); default: throw new BadRequestHttpException('Unsupported format', null, 406); } } }