Passa al contingut principal

Crear URLs amigables en PHP con Symfony2 y el componente Routing

Crear URLs amigables en PHP con Symfony2 y el componente Routing: ¿Tienes algún sitio web hecho sin ningún framework y quieres optimizar las URLs sin rehacer todo el sitio desde cero? Este tutorial puede ayudarte.

Cuando usamos un framework obtenemos muchas herramientas de desarrollo que hacen nuestro sitio web más usable y poderoso, una de ellas es la posibilidad de manipular las URLs para SEO, es decir:

  • De esto: noticias.php?id=52
  • pasamos a algo como esto: noticias/52/titulo-relevante-para-seo


Lo cual permite que el usuario sepa de qué se trata la noticia aún antes de abrir la URL y nos ayuda a obtener más visitas de Google. Pero si no usaste ningún framework, aún así puedes aprovecharte de las ventajas de los nuevos componentes de Symfony2.

La nueva versión de Symfony sigue siendo un poderoso framework listo para usar, sin embargo, sus componentes también pueden ser usados independientemente del framework, y esto es lo que haremos acá.

Usaremos el componente de Routing por sí solo. Para descargarlo vamos a usar Composer como nos recomienda la misma gente de Symfony.


Tip :
Composer es una herramienta que permite manejar las dependencias de los proyectos en PHP, descargando e instalando las bibliotecas por ti, además provee de una clase para hacer el autoload de dichas bibliotecas, etc.


[nota:d3aa42f1cf]Este tutorial requiere cierto conocimiento de PHP y ganas de aprender. y es sólo un punto de partida para aprender a usar los componentes de Symfony2, en concreto el componente de Routing.[/nota:d3aa42f1cf]

Creamos un archivo composer.json en un directorio de nuestro proyecto:

Código :
{
    "name": "framework",
    "version": "1.0.0",
    "require": {
        "symfony/routing": "2.1.*"
    }
}


Luego descargamos la biblioteca de composer usando la consola:

Código :
curl -s http://getcomposer.org/installer | php


O también podemos descargar el archivo de acá.

Una vez hecho esto tipeamos esto en la consola para instalar nuestras dependencias:

Código :
php composer.phar install


Ya con esto podremos ver cómo se ha creado un directorio "vendor" con el componente de Symfony que necesitamos.

[nota:d3aa42f1cf]También se ha creado un directorio oculto .composer que contiene, entre otras cosas, nuestro autoload.php[/nota:d3aa42f1cf]

Una vez hecho esto vamos a crear un archivo .htaccess para usar Mod Rewrite de Apache (es bastante común este módulo, de todas formas asegurense de que esté instalado en su servidor).

Código :
<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ routing.php?url=/$1 [QSA,L]
</IfModule>


Básicamente todo lo que no sean archivos válidos será reenviado a nuestro routing.php que se encargará del resto. Fíjense que junto con él se envía una variable GET "url".

Acá tenemos routing.php:

Código :
<?php

// Las clases de Symfony que vamos a usar:
use Symfony\Component\Routing\Matcher\UrlMatcher;
use Symfony\Component\Routing\RequestContext;
use Symfony\Component\Routing\RouteCollection;
use Symfony\Component\Routing\Route;

/**
 *  Edita esta variable para colocar la ruta y la extension de tus controladores
 *  "%s" sera reemplazado por el parametro _file de las rutas
 * Ejemplo:
 *   $filePattern = ./misarchivos/%s.php5
 *   _file = 'mipagina'
 *   Resultado: ./misarchivos/mipagina.php5
 */
$filePattern = './controllers/%s.php';

$parameters = array ();

try
{
   // Cargamos el autoloader que viene con Composer
   require_once __DIR__.'/vendor/.composer/autoload.php';

   //Creamos nuestra coleccion de rutas
   $routes = new RouteCollection();
   
   /**
    * Configuramos todas nuestras rutas:
    * El primer parametro es el ID de la ruta
    * El segundo es una clase Ruta donde configuraremos nuestra expresion regular
    * En el caso del ej: '/portafolio/{id}'
    * {id} se convertira en una variable GET al final del ejemplo
    * Y el tercer parametro corresponde a un array donde asignaremos parametros adicionales
    * En este caso es muy importante que cada ruta tenga su parametro _file
    * Que sera quien indicara al script que archivo cargar
    * Mas documentacion: http://symfony.com/doc/current/components/routing.html
    */
   $routes->add('portafolio', new Route('/portafolio/{id}', array('_file' => 'portafolio')));

   // Symfony stuff:
   $context = new RequestContext($_SERVER['REQUEST_URI']);

   $matcher = new UrlMatcher($routes, $context);
   
   // GET[url] es enviado por el htaccess
   // Esta linea es la que se encarga de comparar las rutas y devolvernos los parametros necesarios
   $parameters = $matcher->match($_GET['url']);

} catch (Symfony\Component\Routing\Exception\ResourceNotFoundException $exc)
{
   // En caso de no encontrar la ruta,se cargara un archivo 404
   $parameters['_file'] = '404';
} catch (Exception $exc)
{
   // En caso de ocurrir otro error cargaremos un archivo 501
   $parameters['_file'] = '501';
}

// Mezclamos los parametros de la ruta con parametros get
// Dado que cuando no se usan estos sistemas de rutas generalmente se trabaja con GET
$_GET = array_merge($_GET, $parameters);

// Armamos la ruta a nuestro archivo
$file = sprintf($filePattern, $parameters['_file']);

if ( ! file_exists($file))
{
   exit ('No existe el archivo: ' . $file);
}

// y finalmente cargamos el archivo
include_once $file;



Los "controladores" como quise llamarlos se guardan en una carpeta controllers/ (pueden dejarlos en la misma carpeta pública, de manera que las antiguas URLs sigan funcionando, lo ideal sería luego crear redirects 301 a las nuevas rutas.

Tu archivo portafolio.php así como los demás archivos que ya tenías deberían seguir funcionando de la misma manera.

Para probar yo sólo hice algo así en controllers/portafolio.php:

Código :
<?php

echo $_GET['id'];


Recuerden agregar archivos para los errores 404 y 501.

Por último, todo esto habría quedado mejor en una clase más que en programación estructurada. Symfony tiene clases que se encargan de manejar las rutas de manera poderosa con caché, YAML para la configuración y demás. Yo sólo quise proporcionar una manera rápida de acomodar las URLs de sus sitios antes que se decidan o tengan tiempo de reprogramarlos en un nuevo framework o lenguaje.

¡Saludos a todos!
Enviar comentario

Comentaris

  1. Crear URL o HTML es lo más fácil de lo que pensamos, lo importante es ver muchos vídeos tutoriales y ponerlos en práctica, me encantaría que nos enseñen a utilizar el app download mp3 free, para descargar y convertir vídeos pesados o tutoriales a mp3 y sea más fácil escucharlos así estemos fuera de nuestra casa.

    ResponElimina

Publica un comentari a l'entrada

Entrades populars d'aquest blog

Learn Composition from the Photography of Henri Cartier-Bresson

“Do you see it?” This question is a photographic mantra. Myron Barnstone , my mentor, repeats this question every day with the hopes that we do “see it.” This obvious question reminds me that even though I have seen Cartier-Bresson’s prints and read his books, there are major parts of his work which remain hidden from public view. Beneath the surface of perfectly timed snap shots is a design sensibility that is rarely challenged by contemporary photographers. Henri Cartier-Bresson. © Martine Franck Words To Know 1:1.5 Ratio: The 35mm negative measures 36mm x 24mm. Mathematically it can be reduced to a 3:2 ratio. Reduced even further it will be referred to as the 1:1.5 Ratio or the 1.5 Rectangle. Eyes: The frame of an image is created by two vertical lines and two horizontal lines. The intersection of these lines is called an eye. The four corners of a negative can be called the “eyes.” This is extremely important because the diagonals connecting these lines will form the breakdown ...

El meu editor de codi preferit el 2024, que això ja se sap que va canviant 😄

Visual Code Visual Code és un editor de codi font lleuger, però potent que s’executa al teu escriptori i està disponible per a Windows, macOS i Linux. Compta amb suport integrat per a JavaScript, TypeScript i Node.js i té un ric ecosistema d’extensions per a altres llenguatges i entorns d’execució (com C++, C#, Java, Python, PHP, Go, .NET).  És una eina ideal per a desenvolupar i depurar aplicacions web i en el núvol. Per què Visual Code? Visual Code té molts avantatges com a editor de codi font, com per exemple: És gratuït, ràpid i fàcil d’instal·lar i actualitzar. Té un ampli ecosistema d’extensions que et permeten afegir funcionalitats i personalitzar la teva experiència de desenvolupament. Té un suport integrat per a molts llenguatges i entorns d’execució, i et permet depurar i executar el teu codi des del mateix editor. Té una interfície senzilla i elegant, amb diferents temes i modes de visualització. Té un sistema de sincronització de configuracions que et permet guardar les...

Las Mejores Aplicaciones Gratis para iPad de 2012

Las Mejores Aplicaciones Gratis para iPad de 2012 : ¿No tienes ni un duro? No te preocupes, pues hoy os traemos una extensa selección de las mejores apps gratuitas que puedes conseguir en la App Store para que llenes tu iPad de calidad, sin gastar nada de nada.   ¿Estás buscando juegos o apps gratis para tu iPad? En la App Store hay más de 500,000 apps y juegos, y una gran cantidad de ellos está disponible de forma totalmente gratuita. Aquí vamos con la selección de las mejores Apps gratis para iPad (todos los modelos), organizada por categoría. ¿Estás preparado? Las Mejores Apps Gratis de Redes Sociales para iPad Nombre Facebook Gratis Categoría Redes sociales Facebook es la red social más famosa del mundo , con casi mil millones de usuarios. Su app para iPad ha tardado, pero aquí está. Nombre Twitter Gratis Categoría Redes sociales Twitter es la red de microblogging por excelencia. La forma más rápida y directa de informar y mantenerse informado de las cosa...