Webmaster freelance passionné

Des url optimisées avec Symfony2

Pour le référencement de vos pages des url optimisées est un plus non négligeable. Voici une solution parmi d’autres pour mettre cela en place dans votre projet Symfony2.

On commence par créer une entité très simple (pour l’exemple) avec une variable titre (et un Id).


class Job
{
/**
* @var integer $id
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;

/**
* @var string $titre
*
* @ORM\Column(name="titre", type="string", length=255)
*/
private $titre;

/**
* Get id
*
* @return integer
*/
public function getId()
{
return $this->id;
}

/**
* Set Titre
*
* @param string $titre
*/
public function setTitre($titre)
{
$this->titre = $titre;
}

/**
* Get Titre
*
* @return string
*/
public function getTitre()
{
return $this->titre;
}

/**
* get url
*
* @return string
*/

public function getUrl() {
$url=$this->slugify($this->titre);
return $url.".html";
}

private function slugify($text) {
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
$text = iconv('utf-8', 'us-ascii//TRANSLIT', $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text)) {
//echo 'in';
return 'n-a';
}
return $text;
}

}

La méthode getUrl appelle la methode slugify dont le rôle est de nettoyer le titre de notre entité pour former une chaîne compatible avec le format d’une url.

Il faut ensuite, créer notre route.


OpartJobBundle_show:
pattern: /job/show/{id}/{url}
defaults: { _controller: OpartJobbundle:Default:show }

Désormais pour afficher notre entité la route attend deux variables, l‘id de l’entité et son url.

Dernière étape créer le lien dans notre template twig.


<a href="{{ path('OpartJobBundle_show', {'id': entity.id,'url':entity.url}) }}">{{ entity.titre }}</a>

Et voila, désormais vous allez avoir des url du type:
www.monsite.com/job/show/250/le-titre-de-mon-entite.html

Dans mon exemple j’ai créé un bundle pour gérer des offres d’emplois, d’où le « job » dans l’url mais bien sûr vous pouvez mettre ce que vous voulez dans votre route pour que ce soit cohérent avec votre projet.

Partager cet article:
    
            

Commentaires

Un commentaire pour “Des url optimisées avec Symfony2”

  • Ukan

    Génial, merci pour ce petit script efficace. Les URL explicites sont essentielles pour un bon référencement naturel !

  • Laisser un commentaire