Question

I always tend to forget these built-in Symfony functions for making links.

Was it helpful?

Solution

If your goal is to have user-friendly URLs throughout your application, use the following approach:

1) Create a routing rule for your module/action in the application's routing.yml file. The following example is a routing rule for an action that shows the most recent questions in an application, defaulting to page 1 (using a pager):

recent_questions:
   url:    questions/recent/:page
   param:  { module: questions, action: recent, page: 1 }

2) Once the routing rule is set, use the url_for() helper in your template to format outgoing URLs.

<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>

In this example, the following URL will be constructed: http://myapp/questions/recent/1.html.

3) Incoming URLs (requests) will be analyzed by the routing system, and if a pattern match is found in the routing rule configuration, the named wildcards (ie. the :/page portion of the URL) will become request parameters.

You can also use the link_to() helper to output a URL without using the HTML <a> tag.

OTHER TIPS

This advice is for symfony 1.0. It probably will work for later versions.

Within your sfAction class:

string genUrl($parameters = array(), $absolute = false)

eg. $this->getController()->genUrl('yourmodule/youraction?key=value&key2=value', true);

In a template:

This will generate a normal link.

string link_to($name, $internal_uri, $options = array());

eg. link_to('My link name', 'yourmodule/youraction?key=value&key2=value');

In addition, if you actually want a query string with that url, you use this:

link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));

Otherwise, it's going to try to route it as part of the url and likely break your action.

You can generate URL directly without define the rule first.

If you want to generate URL in the actions, you can use generateUrl() helper:

$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))

If you want to generate URL in the templates, you can use url_for() helper:

url_for('[ModuleName]/[ActionName]', $absolute)

set $absolute as true/false, dont forget to use echo if you want to display it.

But if you want to make a link (something like <a href=""></a>), link_to() helper will do.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top