Notice : fwrite(): Write of 344 bytes failed with errno=28 No space left on device in /srv/app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 159
Notice : fwrite(): Write of 352 bytes failed with errno=28 No space left on device in /srv/app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 159
Notice : fwrite(): Write of 507 bytes failed with errno=28 No space left on device in /srv/app/vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php on line 159
Symfony Profiler
vendor/symfony/framework-bundle/Controller/RedirectController.php line 110
<?php
/*
* This file is part of the Symfony package.
*
* (c) Fabien Potencier <fabien@symfony.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Symfony\Bundle\FrameworkBundle\Controller ;
use Symfony\Component\HttpFoundation\HeaderUtils ;
use Symfony\Component\HttpFoundation\RedirectResponse ;
use Symfony\Component\HttpFoundation\Request ;
use Symfony\Component\HttpFoundation\Response ;
use Symfony\Component\HttpKernel\Exception\HttpException ;
use Symfony\Component\Routing\Generator\UrlGeneratorInterface ;
/**
* Redirects a request to another URL.
*
* @author Fabien Potencier <fabien@symfony.com>
*
* @final
*/
class RedirectController
{
private ? UrlGeneratorInterface $router ;
private ? int $httpPort ;
private ? int $httpsPort ;
public function __construct ( UrlGeneratorInterface $router = null , int $httpPort = null , int $httpsPort = null )
{
$this -> router = $router ;
$this -> httpPort = $httpPort ;
$this -> httpsPort = $httpsPort ;
}
/**
* Redirects to another route with the given name.
*
* The response status code is 302 if the permanent parameter is false (default),
* and 301 if the redirection is permanent.
*
* In case the route name is empty, the status code will be 404 when permanent is false
* and 410 otherwise.
*
* @param string $route The route name to redirect to
* @param bool $permanent Whether the redirection is permanent
* @param bool|array $ignoreAttributes Whether to ignore attributes or an array of attributes to ignore
* @param bool $keepRequestMethod Whether redirect action should keep HTTP request method
*
* @throws HttpException In case the route name is empty
*/
public function redirectAction ( Request $request , string $route , bool $permanent = false , bool |array $ignoreAttributes = false , bool $keepRequestMethod = false , bool $keepQueryParams = false ): Response
{
if ( '' == $route ) {
throw new HttpException ( $permanent ? 410 : 404 );
}
$attributes = [];
if ( false === $ignoreAttributes || \is_array ( $ignoreAttributes )) {
$attributes = $request -> attributes -> get ( '_route_params' );
if ( $keepQueryParams ) {
if ( $query = $request -> server -> get ( 'QUERY_STRING' )) {
$query = HeaderUtils :: parseQuery ( $query );
} else {
$query = $request -> query -> all ();
}
$attributes = array_merge ( $query , $attributes );
}
unset( $attributes [ 'route' ], $attributes [ 'permanent' ], $attributes [ 'ignoreAttributes' ], $attributes [ 'keepRequestMethod' ], $attributes [ 'keepQueryParams' ]);
if ( $ignoreAttributes ) {
$attributes = array_diff_key ( $attributes , array_flip ( $ignoreAttributes ));
}
}
if ( $keepRequestMethod ) {
$statusCode = $permanent ? 308 : 307 ;
} else {
$statusCode = $permanent ? 301 : 302 ;
}
return new RedirectResponse ( $this -> router -> generate ( $route , $attributes , UrlGeneratorInterface :: ABSOLUTE_URL ), $statusCode );
}
/**
* Redirects to a URL.
*
* The response status code is 302 if the permanent parameter is false (default),
* and 301 if the redirection is permanent.
*
* In case the path is empty, the status code will be 404 when permanent is false
* and 410 otherwise.
*
* @param string $path The absolute path or URL to redirect to
* @param bool $permanent Whether the redirect is permanent or not
* @param string|null $scheme The URL scheme (null to keep the current one)
* @param int|null $httpPort The HTTP port (null to keep the current one for the same scheme or the default configured port)
* @param int|null $httpsPort The HTTPS port (null to keep the current one for the same scheme or the default configured port)
* @param bool $keepRequestMethod Whether redirect action should keep HTTP request method
*
* @throws HttpException In case the path is empty
*/
public function urlRedirectAction ( Request $request , string $path , bool $permanent = false , string $scheme = null , int $httpPort = null , int $httpsPort = null , bool $keepRequestMethod = false ): Response
{
if ( '' == $path ) {
throw new HttpException ( $permanent ? 410 : 404 );
}
if ( $keepRequestMethod ) {
$statusCode = $permanent ? 308 : 307 ;
} else {
$statusCode = $permanent ? 301 : 302 ;
}
// redirect if the path is a full URL
if ( parse_url ( $path , \PHP_URL_SCHEME )) {
return new RedirectResponse ( $path , $statusCode );
}
$scheme ??= $request -> getScheme ();
if ( $qs = $request -> server -> get ( 'QUERY_STRING' ) ?: $request -> getQueryString ()) {
if (! str_contains ( $path , '?' )) {
$qs = '?' . $qs ;
} else {
$qs = '&' . $qs ;
}
}
$port = '' ;
if ( 'http' === $scheme ) {
if ( null === $httpPort ) {
if ( 'http' === $request -> getScheme ()) {
$httpPort = $request -> getPort ();
} else {
$httpPort = $this -> httpPort ;
}
}
if ( null !== $httpPort && 80 != $httpPort ) {
$port = ": $httpPort " ;
}
} elseif ( 'https' === $scheme ) {
if ( null === $httpsPort ) {
if ( 'https' === $request -> getScheme ()) {
$httpsPort = $request -> getPort ();
} else {
$httpsPort = $this -> httpsPort ;
}
}
if ( null !== $httpsPort && 443 != $httpsPort ) {
$port = ": $httpsPort " ;
}
}
$url = $scheme . '://' . $request -> getHost (). $port . $request -> getBaseUrl (). $path . $qs ;
return new RedirectResponse ( $url , $statusCode );
}
public function __invoke ( Request $request ): Response
{
$p = $request -> attributes -> get ( '_route_params' , []);
if ( \array_key_exists ( 'route' , $p )) {
if ( \array_key_exists ( 'path' , $p )) {
throw new \RuntimeException ( sprintf ( 'Ambiguous redirection settings, use the "path" or "route" parameter, not both: "%s" and "%s" found respectively in "%s" routing configuration.' , $p [ 'path' ], $p [ 'route' ], $request -> attributes -> get ( '_route' )));
}
return $this -> redirectAction ( $request , $p [ 'route' ], $p [ 'permanent' ] ?? false , $p [ 'ignoreAttributes' ] ?? false , $p [ 'keepRequestMethod' ] ?? false , $p [ 'keepQueryParams' ] ?? false );
}
if ( \array_key_exists ( 'path' , $p )) {
return $this -> urlRedirectAction ( $request , $p [ 'path' ], $p [ 'permanent' ] ?? false , $p [ 'scheme' ] ?? null , $p [ 'httpPort' ] ?? null , $p [ 'httpsPort' ] ?? null , $p [ 'keepRequestMethod' ] ?? false );
}
throw new \RuntimeException ( sprintf ( 'The parameter "path" or "route" is required to configure the redirect action in "%s" routing configuration.' , $request -> attributes -> get ( '_route' )));
}
}