Slugify un URL con Symfony

Oggi vi mostrerò passo dopo passo come rendere un url slugified utilizzando Symfony. I passi sono i seguenti:

  • Schema
  • File routing
  • Template per il richiamo dell’ url
  • Classi del modell

Ci sono diversi passi da fare, ma sono tutti molto semplici ed alcuni di questi sono dei veri e propri copia e incolla di quello scritto qui di seguito.

In questo cercheremo di rendere un url slugified usando la tabella categoria, creeremo un url del tipo: http://&#8230://category/10/nome_categoria

//Schema, la tabella Categoia contiene 3 campi (id, nome e descizione)

category:
id:           ~
name:         { type: varchar(255) }
description:      { type: varchar(255), required: true }

Nel file di routing, dell’applicazione (app) che vi serve, creiamo il seguente routing (come si può notatre dal “class”si sta usando Doctrine e non Propel). Come si vede, creaiamo lo slug sul nome (name_slug)

//routing
category_show:
url:     /category/:id/:name_slug
class:   sfDoctrineRoute
options: { model: Category, type: object }
param:   { module: category, action: show }
requirements:
id: \d+
sf_method: [get]

Nel template, si deve richiamare il nome creato nel file di routing e bisogna passarci l’oggetto category (il passaggio avviene tramire l’action)

//template
url_for(array(‘sf_route’ => ‘category_show‘, ‘sf_subject’ => $category))
oppure
url_for(‘category_show‘, $category))

Creare la funzione getNameSlug all’interno della classe Category, dove si può notare che tramite il getName prendiamo il valore del campo name dello schema

//lib/model/doctrine/Category.class.php

class.php
public function getNameSlug()
{
return CategorySlug::slugify($this->getName());
}

Ora ci rimane da creare la classe  CategorySlug dove dichiare la funzione che ci permetterà di trasformare l’url nel formato seguente http://&#8230://category/10/nome_categoria

(Tale codice può essere copiato ed incollato, facendo attenzione a modificare solo il nome della classe e del file in base alle vostre esigenze)

// lib/model/CategorySlug.class.php

class CategorySlug
{
static public function slugify($text)
{
// replace all non letters or digits by –
$text = preg_replace(‘/\W+/’, ‘-‘, $text); 

// trim and lowercase
$text = strtolower(trim($text, ‘-‘));

return $text;
}
}

Per maggioni info, visitate l’url http://www.symfony-project.org/jobeet/1_4/Doctrine/en/05

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...