symfony liens & routing. principe du routage url standard dévoile lappli (piratage) url...

23
Symfony Liens & routing

Upload: anne-ramos

Post on 03-Apr-2015

122 views

Category:

Documents


8 download

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