viko
viko

Reputation: 533

Symfony2 RedirectResponse message

I have problem with redirect to another website. When I redirected I see message: "Redirecting to...". Why? Really I can't redirect to site without problem?

I see: Is it possible to change the default redirect message in Symfony?

My code:

  /**
   * @Route("/project/{url}/{link}/", name="page_show")
   * @Template("base.html.twig")
   */
  public function pageAction($link, $url) {

    if ($link == '...') {
      $redrect = new RedirectResponse('http://...');
      return $redrect;
    }

Maybe I'm Idiot and don't see solution...

Upvotes: 0

Views: 2157

Answers (6)

Eugen Mihailescu
Eugen Mihailescu

Reputation: 3711

Unless you are really keen to redirect using the Symfony' RedirectResponse class, you can always relay on the old good PHP:

function redirectUrl($url, $replace=true, $status=302){
    header("Location : ".$url, $replace, $status);
    exit();
}

// usage example
redirectUrl("http://www.google.com");

This not only works like a charm but is extremely fast in comparison with Symfony's internal function because there is only one call + die/exit.

Read more about the PHP's header function.

However, since this approach is totally decoupled from the framework, the Symfony profiler won't be able to intercept your redirect so the developer toolbar won't notice/show this redirect. It depends what you want.

Upvotes: 0

Javier Eguiluz
Javier Eguiluz

Reputation: 4107

If this is happening in the development environment, then you have set the intercept_redirects configuration option to true. Set it to false as explained in: http://symfony.com/doc/current/reference/configuration/web_profiler.html

If this is happening in the production environment, the reason is that RedirectResponse has some hardcoded HTML content to do the redirection. See these lines of code: https://github.com/symfony/symfony/blob/2.8/src/Symfony/Component/HttpFoundation/RedirectResponse.php#L86-L96

During 1 second, you see the Redirecting to ... message. Changing this message is possible, but it requires you a lot of effort. Everything is explained here: Is it possible to change the default redirect message in Symfony?


Update: in this discussion in the Symfony repository there is more information about this. The redirect should be instantaneous because it should use the information provided in the response headers. If something wrong happens, then the hardcoded HTML content is used. So you probably need to debug why the response is not getting the right redirect headers.

Upvotes: 1

user5914528
user5914528

Reputation:

Redirect to Another web site:

public function pageAction(Request $request)
{
    return $this->redirect('https://google.com');
}

Upvotes: 1

Imanali Mamadiev
Imanali Mamadiev

Reputation: 2654

Answer to your question is in official Symfony book.

http://symfony.com/doc/current/book/controller.html#redirecting

public function pageAction()
{
   return $this->redirect('http://stackoverflow.com');
}

Upvotes: 0

LuckyLue
LuckyLue

Reputation: 158

Read closely

First, create your template 301.html.twig into your Acme/FooBundle/Resources/views/Error/ with the content you want.

Here: Is it possible to change the default redirect message in Symfony?

Upvotes: 1

Raphaël Malié
Raphaël Malié

Reputation: 4012

I'm not sure you can combine @Template("base.html.twig") with a redirect response. Try to remove the @template annotation and do a render of base.html.twig in the end of your action :

/**
 * @Route("/project/{url}/{link}/", name="page_show")
 */
public function pageAction($link, $url) {

    if ($link == '...') {
      $redrect = new RedirectResponse('http://...');
      return $redrect;
    }

    // Maybe add the proper path "BundleName:DirectoryName:base.html.twig"
    return $this->render('base.html.twig');
}

Upvotes: 1

Related Questions