Top Banner
Symfony Liens & routing
23

Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Apr 03, 2015

Download

Documents

Anne Ramos
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Symfony

Liens & routing

Page 2: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Principe du routage

• URL standard dévoile l’appli (piratage)• URL standard incompréhensible (référencement)

– les développeurs devront faire correspondre la structure de l'URL avec la structure des fichiers.

• Le routage est un mécanisme qui réécrit les URL pour les rendre plus compréhensibles

• url rewriting => mod_rewrite poru apache– url indépendante de la structure de fichier

• Book mark des pages dynamiques

Page 3: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

URL et URI

• Par défaut dans symfony– <module>/<action>?param1=value1...

• Le routage symfony pourra faire correspondre– articles/finance/2006/activity-

breakdown.html – article/permalink?

year=2006&subject=finance&title=activity-breakdown

Page 4: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Config/routing.yml

• http://www.example.com/articles/finance/2006/activity-breakdown.html

• Le système de routage crée– 'module' => 'article' – 'action' => 'permalink' – 'subject' => 'finance' – 'year' => '2006' – 'title' => 'activity-breakdown'

article_by_title: url: articles/:subject/:year/:title.html param: { module: article, action: permalink }

Page 5: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Écriture des liens

• Mécanisme réversible– Le nombre de paramètres doit

correspondre– Pas d’hyperlien directement dans des

balises <a>– Utilisation des helpers

Page 6: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

url_for

• transforme les URI internes en URL externes<a href="<?php echo url_for('article/permalink?

subject=finance&year=2006&title=activity-breakdown') ?>">click here

</a>

– Le helper trouve une correspondance avec la règle `article_by`

– Le système de routage crée l'URL externe correspondante

<a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">click here

</a>

Page 7: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

link_to

• affiche directement un hyperlien • permet d'éviter le mélange de php et html<?php

echo link_to( 'click here', 'article/permalink?subject=finance&year=2006&title=activity-breakdown' )

?>

• `link_to()` appelle `url_for() en interne<a href="http://www.example.com/articles/finance/2006/activity-breakdown.html">

click here</a>

• Le système de routage ne fonctionne qu’avec l’utilisation de link_to() ou url_for()

Page 8: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Liens hypertextes, boutons et formulaires

• Hyperlien dans une image <?php echo link_to(image_tag('read.gif'), article/read?title=Finance_in_France') ?>

<a href="/routed/url/to/Finance_in_France"><img src="/images/read.gif" /></a>

• Balise bouton <?php echo button_to('my article', 'article/read?title=Finance_in_France') ?>

<input value="my article" type="button" 

onclick="document.location.href='/routed/url/to/Finance_in_France';" />

• Balise formulaire <?php echo form_tag('article/read?title=Finance_in_France') ?>

<form method="post" action="/routed/url/to/Finance_in_France" />

Page 9: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Transformer une requête GET en POST

• Intérêt– Non enregistrable en favoris– Non indexé par les moteurs de recherche

<?php echo link_to('go to shopping cart', 'shoppingCart/add?id=100', 'post=true') ?>

<a onclick="f = document.createElement('form'); document.body.appendChild(f); f.method = 'POST'; f.action = this.href; f.submit();return false;" href="/shoppingCart/add/id/100.html">go to shopping cart</a>

• L’action associée ne doit répondre qu’à la méthode POST$this->forward404If($request->getMethod() != sfRequest::POST)

Page 10: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Forcer l’adressage absolu

<?php echo url_for('article/read?title=Finance_in_France') ?>

'/routed/url/to/Finance_in_France‘

<?php echo url_for('article/read?title=Finance_in_France', array(

‘absolute’ => true

) ?>

'http://www.example.com/routed/url/to/Finance_in_France'

Page 11: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Les options du helper lien

<?php echo link_to('my article', 'article/read?title=Finance_in_France', array(

'class' => 'foobar', 'target' => '_blank','confirm' => 'Are you sure?','popup' => array(

'Window title','width=310,height=400,left=320,top=0‘

) )

) ?>

Page 12: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Image_tag

<?php echo image_tag('test') ?> <img href="/images/test.png" alt="Test" />

<?php echo image_tag('test.gif') ?> <img href="/images/test.gif" alt="Test" />

<?php echo image_tag('/my_images/test.gif') ?> <img href="/my_images/test.gif" alt="Test" /> .

<?php echo image_tag('test', array("width"=>"100", "height"  => "20" )

) ?><img href="/images/test.png" alt="Test" width="100" height="20"/>

Page 13: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

url rewriting

• Le nom du contrôleur principal (index.php or myapp_dev.php) n'apparait jamais dans les URI internes

• Faire apparaître le nom du controleur dans l’URL

http://www.example.com/index.php/articles/finance/2006/activity-breakdown.html

• Désactiver par défaut dans tous les environnements sauf prod– Possible pour une seule application

prod: .settings no_script_name: off

Page 14: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Routage par défaut

myapp/config/routing.yml

homepage: url: / param: { module: default, action: index } default_symfony: url: /symfony/:action/* param: { module: default } default_index: url: /:module param: { action: index } default: url: /:module/:action/*

Page 15: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Règles de routage

• Bijection entre URL externe et URI interne

• En 3 parties– Un titre: utilisé par les helpers de liens– Un motif: mot clé url– Un tableau de variable HTTP: mot clé param

• Parcours séquentiel des règles jusqu’à ce qu’une « match »

Page 16: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Nouvelle règle de routage

• par défautarticle/read?id=123 /article/read/id/123

• La règlearticle_by_id: url: /article/:id param: { module: article, action: read }

• Réécrit enarticle/read?id=123 /article/123

Page 17: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

contraintes

• Restriction d’une règle au type d’une variable

article_by_id: url: /article/:id param: { module: article, action: read }

requirements: { id: \d+ } • Id doit être un nombre• NB il est préférable de masquer les clés

primaires (stripped_name cf TP)

Page 18: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Valeur par défaut

article_by_id:

url: /article/:id

param: { module: article, action: read, id: 1 }

• Affiche l’article ayant pour clé primaire 1 si l’id n’est pas spécifié

Page 19: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Convention de nommage

• peut être appelée par module/action<?php echo link_to('my article', 'article/read?id='.$article->getId()) ?>

• peut être appelée par son nom (recommandé)

<?php echo link_to('my article', '@article_by_id?id='.$article->getId()) ?>

• Plus rapide : routing.yml n’a pas à être parcouru

Page 20: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Suffixe .html

• Particulièrement pertinent pour les moteurs de recherche

myapp/config/settings.yml myapp/config/routing.yml

prod: .settings suffix: .html

article_list: url: /latest_articles param: { module: article, action: list }

article_list_feed: url: /latest_articles.rss param: { module: article, action: list, type: feed }

Page 21: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Gérer le routage sans routing.yml

sfRouting::getInstance()->prependRoute('article_by_id', // Route name'/article/:id', // Route pattern array(

'module' => 'article', 'action' => 'read‘

), array('id' => '\d+')

);

Page 22: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Information sur l’URI courante

// http://myapp.example.com/article/21   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  

Rappel$module = $this->getRequestParameter('module'); $action = $this->getRequestParameter('action');

Page 23: Symfony Liens & routing. Principe du routage URL standard dévoile lappli (piratage) URL standard incompréhensible (référencement) –les développeurs devront.

Transformer une URI interne en URL externe

$uri = 'article/read?id=21';   $url = $this->getController()->genUrl($uri);

/article/21  

$url = $this->getController()->genUrl($uri, true); http://myapp.example.com/article/21