views:

43

answers:

3

Hello,

i'm using form filtering to filter data in the frontend.

The problem is that the URL is ugly

 http://............./players/game/?st_player_cv_filters[location_id]=1&st_player_cv_filters[plateforme_id]=3&st_player_cv_filters[level_id]=3&st_player_cv_filters[_csrf_token]=023c5c9fb5fc7e7b6ed60d6839c36f67

(form rendered with :

 <?php echo $form->renderFormTag(url_for("game_player", $game), array('method' => 'get')); ?>
<table><tr><th><label for="location_id"><?php echo __('Country'); ?></label></th><td><?php echo $form['location_id']; ?></td></tr>

How to render this url in a better way please ?

Thanks

A: 

If you have the option, you could use POST rather than GET. That would clean up the url significantly.

JoshD
yeah, but with POST user can't bookmark the result of the filters results. And with POST i have trouble keeping the parameters through pages (doctrine pager)
Tristan
+3  A: 

Using the framework/API itself is a good idea if it supports your needs. By the sound of your question, you can likely use the Symfony routing API to faciliate a solution...

For example, this book chapter covers it:

How to configure the routing rules to change the appearance of URLs

Futhermore it speaks about long querystrings that you mentioned:

For instance, a traditional URL contains the file path to a script and some parameters necessary to complete the request, as in this example:

http://www.example.com/web/controller/article.php?id=123456&amp;format_code=6532

and speaks about the associated problems:

The unintelligibility of URLs makes them disturbing wherever they appear, and they dilute the impact of the surrounding content

The chapter provides HOW IT WORKS: examples of how to change your URLs using configuration and programming.

You should be able to maintain bookmarkability through easier to read/less complex/more secure URLs.

John K
+1  A: 

sometimes when I run into this problem I run a redirect from the receiving page for the form to itself using symfony's redirect method.

$this->redirect('.../formAction?'.http_build_query($get_vars));

OR

use the url_for() method and such as:

<form action="<?php echo url_for('.../formAction?'.http_build_query($get_vars)); ?>">
...
</form>
Patrick