If you need to retrieve information about the current route--for instance, to prepare a future "back to page xxx" link--you should use the methods of the sfRouting object. The URIs returned by the getCurrentInternalUri()
method can be used in a call to a link_to()
helper, as shown in Listing 9-25.
Listing 9-25 - Using sfRouting
to Get Information About the Current Route
// If you require a URL like
http://myapp.example.com/article/21
// Use the following in article/read action
$uri = sfRouting::getInstance()->getCurrentInternalUri();
=> article/read?id=21
$uri = sfRouting::getInstance()->getCurrentInternalUri(true);
=> @article_by_id?id=21
$rule = sfRouting::getInstance()->getCurrentRouteName();
=> article_by_id
// If you just need the current module/action names,
// remember that they are actual request parameters
$module = $this->getRequestParameter('module');
$action = $this->getRequestParameter('action');
If you need to transform an internal URI into an external URL in an action — just as url_for()
does in a template — use the genUrl()
method of the sfController object, as shown in Listing 9-26.
Listing 9-26 - Using sfController
to Transform an Internal URI
$uri = 'article/read?id=21';
$url = $this->getController()->genUrl($uri);
=> /article/21
$url = $this->getController()->genUrl($uri, true);
=> http://myapp.example.com/article/21