symfony liens & routing. principe du routage url standard dévoile lappli (piratage) url...
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/1.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/2.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/3.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/4.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/5.jpg)
É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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/6.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/7.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/8.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/9.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/10.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/11.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/12.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/13.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/14.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/15.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/16.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/17.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/18.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/19.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/20.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/21.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/22.jpg)
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](https://reader036.vdocuments.mx/reader036/viewer/2022062511/551d9d8d497959293b8c3115/html5/thumbnails/23.jpg)
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