2010-08-04 26 views
5

Estoy usando cakephp en uno de mis proyectos y mi cliente quiere que las URL del sitio finalicen con .html y no con las URL usuales habituales. Me preguntaba si es posible en cakephp hacerlo a través de cualquiera de sus técnicas de enrutamiento. Por favor ayuda.¿Cómo puedo agregar .html a todas mis URL en cakephp?

+0

Ver también [Agregar un prefijo a cada URL en CakePHP] (http://stackoverflow.com/questions/1794412/adding-a-prefix-to-every-url-in-cakephp) – deceze

+0

sugiero que le explique a Por qué es importante su cliente –

+0

Parece que el cliente puede necesitar más educación. No puedo pensar en ninguna razón por la cual se necesitaría una extensión .html. ¿Alguien puede iluminarme? –

Respuesta

2

tuvieron que resolver esto sin usar Rutas. Se mantuvo la entrada de ruta predeterminada para páginas:

Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display')); 

y en la acción de visualización retira la extensión .html y rendido la vista respectiva:

preg_replace('/\.html$/','',$view); 
$this->render(null,'default',$view); 

Mientras llamar las páginas añaden 'ext' a ser.html

2

Según this page se puede hacer algo como esto

Router::connect('/(.*).html', array('controller' => 'pages', 'action' => 'display'));

pero como se está hablando de extensiones, que pueden tener otras consecuencias.

+0

Hola Lucas Heneks, Gracias por el enlace. Lo intenté, pero parece que no funciona para mí ... Me da el error de controlador faltante. –

0

También deberá asociar la extensión html al módulo PHP en Apache. No recuerdo exactamente el ajuste necesario, pero estará en el archivo /etc/httpd/httpd.conf. (Este archivo puede estar en un lugar ligeramente diferente dependiendo del sistema operativo de su servidor). Solo busque la línea que asocia .php con el módulo PHP. Creo que también puede definir esto en el archivo .htaccess, pero el clima o no depende de lo que se le permita hacer en el archivo httpd.conf.

+0

Eso no será necesario ya que Apache simplemente enrutará todo a través de Cake, extensión y todo, ya que ninguno de los archivos .html realmente existe. Solo necesita hacer lo que describe si tiene archivos HTML físicos que desea procesar por PHP, que no es el caso aquí. – deceze

5

Uno de los parámetros que puede enviar a Router :: url() (que se llama mediante otros métodos como HtmlHelper :: link() y Controller :: redirect()) es 'ext'. Intenta configurar esto en 'html'. Por ejemplo:

echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

o

$this->redirect(array('controller' => 'products', 'action' => 'index', 'ext' => 'html')); 

Si funciona, trate de encontrar una forma puede anular Router :: url() para añadir en forma predeterminada.

+0

En Cakephp 3 puede usar el parámetro '_ext' que se envía a Url Helper. [ver más - https://book.cakephp.org/3.0/en/views/helpers/url.html] – nsbm

12

Eso está bien documentado en el cookbook.

ACTUALIZACIÓN: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions

para manejar diferentes extensiones de archivo con sus rutas, necesita uno línea adicional de las rutas en el archivo de configuración:

Router::parseExtensions('html', 'rss'); 

Si desea crear una URL como /page/title-of-page.html crearía su ruta como se muestra a continuación:

Router::connect(
    '/page/:title', 
    array('controller' => 'pages', 'action' => 'view'), 
    array(
     'pass' => array('title') 
    ) 
); 

Luego de crear lazos que se asignan de nuevo a las rutas utilizan simplemente:

$this->Html->link(
    'Link title', 
    array('controller' => 'pages', 'action' => 'view', 
      'title' => 'super-article', 'ext' => 'html') 
); 
+0

Creo que debe haber un mejor enfoque que pueda agregar .html a todas las acciones del controlador en lugar de proporcionar ext => 'html' a cada controlador de forma manual. Además, si desea activar/desactivar la extensión .html, no tiene sentido ir a todos los controladores y agregar/eliminar manualmente el parámetro ext. ¿Qué dices si alguien quiere hacer Joomla como seo on/off? –

+0

@RNKushwaha: Puede inyectar la extensión de archivo a cada enlace en AppHelper :: url() si eso es lo que quiere decir con su comentario. – bancer

2

Como Routes Configuration - File extensions sección de documentación dice, se puede utilizar:

Router::parseExtensions('html', 'rss'); 

Esto indicará al router para eliminar las extensiones de archivo de juego, y luego analizar lo que queda.

0

Es bastante simple, abierto archivo app/config/routes.php y sólo tiene que añadir

Router::parseExtensions('html', 'rss'); 

Por encima de la línea de

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home')); 

Ahora se puede acceder incluso a sus métodos de controlador con extensión .html.

Espero que ayude.

Cuestiones relacionadas