La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Symfony Liens & routing.

Présentations similaires


Présentation au sujet: "Symfony Liens & routing."— Transcription de la présentation:

1 Symfony Liens & routing

2 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

3 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

4 Config/routing.yml article_by_title: url: articles/:subject/:year/:title.html param: { module: article, action: permalink } Le système de routage crée 'module' => 'article' 'action' => 'permalink' 'subject' => 'finance' 'year' => '2006' 'title' => 'activity-breakdown'

5 É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

6 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="

7 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=" click here </a> Le système de routage ne fonctionne qu’avec l’utilisation de link_to() ou url_for()

8 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" />

9 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)

10 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 ) ?> '

11 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‘ ) ) ?>

12 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"/>

13 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 Désactiver par défaut dans tous les environnements sauf prod Possible pour une seule application prod: .settings no_script_name: off

14 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/*

15 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 »

16 Nouvelle règle de routage
par défaut article/read?id=123  /article/read/id/123 La règle article_by_id: url: /article/:id param: { module: article, action: read } Réécrit en article/read?id=123  /article/123

17 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)

18 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é

19 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', ?> Plus rapide : routing.yml n’a pas à être parcouru

20 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 }

21 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+') );

22 Information sur l’URI courante
//   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');

23 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);


Télécharger ppt "Symfony Liens & routing."

Présentations similaires


Annonces Google