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?
Respuesta
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
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.
Hola Lucas Heneks, Gracias por el enlace. Lo intenté, pero parece que no funciona para mí ... Me da el error de controlador faltante. –
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.
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
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.
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
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')
);
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? –
@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
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.
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.
- 1. Agregar un prefijo a cada URL en CakePHP
- 2. ¿Cómo puedo caducar todas mis sesiones en Tomcat?
- 3. ¿Cómo puedo acceder a un parámetro enviado a través de la URL dentro de mis archivos de vista en CakePHP?
- 4. ¿Cómo puedo repetir todas mis casillas marcadas?
- 5. ¿Cómo agregar un prefijo a todas mis rutas en Play Framework 2?
- 6. ¿Cómo agregar variables a url en jquery?
- 7. CakePHP enlace HTML
- 8. Cómo agregar AdSense a mis aplicaciones
- 9. ¿Puedo simplemente crear atributos en mis etiquetas HTML?
- 10. ¿Cómo puedo eliminar comentarios HTML en mis Facelets?
- 11. ¿Puedo agregar mis propios fragmentos de código a xcode 4?
- 12. ¿Cómo puedo agregar una etiqueta de anclaje a mi URL?
- 13. ¿Cómo puedo acceder a una solicitud GET en CAKEPHP?
- 14. agregar parámetros de URL a un formulario PHP HTML
- 15. ¿Cómo elimino "cgi-bin" de mis URL?
- 16. ¿Cómo puedo agregar relleno a la lista desplegable html?
- 17. ¿Cómo agregar componentes JSF existentes a mis propios componentes personalizados?
- 18. enrutador Magento: ¿cómo puedo capturar parámetros en todas las URL?
- 19. Agregar prefijo a las URL de todas las clases de controlador en el paquete
- 20. cakephp no funciona url-reescritura en Ubuntu
- 21. ¿Cómo agregar un parámetro a la URL?
- 22. ¿Puedo servir archivos .html usando Razor como si fueran archivos .cshtml sin cambiar la extensión de todas mis páginas?
- 23. ¿Cómo agregar el parámetro url a la URL actual?
- 24. Agregar extensión a URL: Rails
- 25. redirigir todas las extensiones .html a .php
- 26. ¿Cómo puedo encadenar mis llamadas a métodos?
- 27. ¿Cómo puedo agregar un encabezado predeterminado a mis archivos de origen automáticamente en Eclipse?
- 28. ¿Cómo puedo restringir cierto contenido en CakePHP?
- 29. ¿Cómo agregar un prefijo a todas las acciones con el enrutamiento de URL ASP.Net MVC?
- 30. ¿Cómo ejecuto todas mis pruebas PHPUnit?
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
sugiero que le explique a Por qué es importante su cliente –
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? –