Source of file ControllerRouting.php
Size: 3,650 Bytes - Last Modified: 2023-11-16T22:56:02+01:00
/home/websites/teicee/packagist/site/phpdoc/conf/../vendor/teicee/core-bundle/src/Traits/ControllerRouting.php
| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 | <?phpnamespace TIC\CoreBundle\Traits; use Symfony\Component\HttpFoundation\RedirectResponse; /** * Gestion des routes associées au controlleur & réponses de redirections. */trait ControllerRouting {// Initialisation automatique des propriétés à partir du nom de la classe courante use \TIC\CoreBundle\Traits\ContextProperties; // ctxRoute /** * Raccourci pour générer le nom de la route d'une action du controlleur. * * @param string $action Nom de l'action (utilisée en suffixe de la route) * @param mixed $item Entité (avec getId) ou clé primaire pour la route (id) * @param array $params Liste des paramètres pour la génération de l'URL * @return string URL de la route correspondante */protected function getRoute(string $action, mixed $item = null, ?array $params = []): string { if (null !== $item && empty($params)) { if (\is_scalar($item)) $params['id'] = $item; elseif (\is_object($item)) $params['id'] = $item->getId(); elseif (\is_array($item) && isset($item['id'])) $params['id'] = $item['id']; } return $this->generateUrl($this->ctxRoute . $action, $params); } /** * Redirection vers l'action par défaut de liste. * * @param array $params Liste des paramètres pour la génération de l'URL * @param integer $status Code HTTP de la réponse à retourner * @return RedirectResponse Réponse HTTP avec redirection vers la route correspondante */protected function redirectList(?array $params = [], int $status = 303): RedirectResponse { return $this->redirect($this->getRoute('list', null, $params), $status); } /** * Redirection vers l'action par défaut de fiche. * * @param mixed $item Entité (avec getId) ou clé primaire pour la route (id) * @param array $params Liste des paramètres pour la génération de l'URL * @param integer $status Code HTTP de la réponse à retourner * @return RedirectResponse Réponse HTTP avec redirection vers la route correspondante */protected function redirectItem(mixed $item, ?array $params = [], int $status = 303): RedirectResponse { return $this->redirect($this->getRoute('show', $item, $params), $status); } /** * Redirection vers l'adresse du referer (depuis entêtes du serveur web). * * @param integer $status Code HTTP de la réponse à retourner * @return RedirectResponse Réponse HTTP avec redirection vers la page précédente */protected function redirectReferer(int $status = 302): RedirectResponse { $referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : null; if (null === $referer) { $request = $this->container->get('request_stack')->getCurrentRequest(); if ($request) $referer = $request->headers->get('referer'); } return $this->redirect($referer, $status); } /** * Redirection automatique selon le paramètre (liste, fiche, referer, autre...). * * @param mixed $target Boolean (liste/referer), Entité (ou id) ou autre route * @return RedirectResponse Réponse HTTP avec redirection vers l'URL correspondante */protected function redirectTo(mixed $target = false): ?RedirectResponse { if ($target === false) return $this->redirectReferer(); if ($target === true) return $this->redirectList(); if (\is_object($target)) return $this->redirectItem($target); if (\is_array($target)) return $this->redirectItem($target); if (\is_numeric($target)) return $this->redirectItem($target); if (\is_string($target)) return $this->redirect($this->generateUrl($target)); return null; } } |