Gerando URLs absolutas para rotas do Symfony2

Nas classes que extendem, em algum nível, a classe Controller padrão do Symfony2 está disponível um método utilitário que é simplesmente um atalho para o gerador de rotas do serviço de roteamento (router). Esse método é o generateUrl($route, $parameters, $referenceType).

Na maioria dos casos de uso, como em redirects, passamos apenas um ou dois parâmetros para esse método, que são, respectivamente, o nome da rota e, opcionalmente, os parâmetros que devem ser aplicados a ela. O terceiro parâmetro, que acaba esquecido, traz algumas possibilidades que podem ser muito úteis. Um exemplo prático: precisei incluir na resposta de um webservice em JSON a URL para uma página da aplicação relacionada a objetos específicos, como esse serviço seria consumido por uma aplicativo mobile, precisava retornar a URL absoluta — incluindo o protocolo e domínio — e não apenas o caminho, que é o comportamento padrão do método. Para fazer isso, bastou passar a constante abaixo no terceiro parâmetro do método:

\Symfony\Component\Routing\Generator\UrlGeneratorInterface::ABSOLUTE_URL

Para dar mais legibilidade ao código, adicionei um use para a interface:

use Symfony\Component\Routing\Generator\UrlGeneratorInterface;

// ...

class MainController extends Controller
{
  public function indexAction()
  {
    // ...
    $item['Url'] = $this->generateUrl('item_detail', array('id' => $item['Id']), UrlGeneratorInterface::ABSOLUTE_URL);
  }
}
Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s