I am using cakephp in one of my projects and my client wants the site URLs to end with .html and not the usual friendly urls. I was wondering if its possible in cakephp to do so through any of its routing techniques. Please help.
That is well documented in the cookbook.
UPDATE: http://book.cakephp.org/2.0/en/development/routing.html#file-extensions
To handle different file extensions with your routes, you need one extra line in your routes config file:
Router::parseExtensions('html', 'rss');
If you want to create a URL such as /page/title-of-page.html you would create your route as illustrated below:
Router::connect(
'/page/:title',
array('controller' => 'pages', 'action' => 'view'),
array(
'pass' => array('title')
)
);
Then to create links which map back to the routes simply use:
$this->Html->link(
'Link title',
array('controller' => 'pages', 'action' => 'view',
'title' => 'super-article', 'ext' => 'html')
);
One of the parameters you can send to Router::url() (which is called by other methods like HtmlHelper::link() and Controller::redirect()) is 'ext'. Try setting this to 'html'. E.g:
echo $this->Html->link('Products', array('controller' => 'products', 'action' => 'index', 'ext' => 'html'));
or
$this->redirect(array('controller' => 'products', 'action' => 'index', 'ext' => 'html'));
If it works, try figuring out a way you can override Router::url() to add it in by default.
Had to solve this without using Routes. Kept the default route entry for pages:
Router::connect('/pages/*', array('controller' => 'pages', 'action' => 'display'));
and in the display action removed the .html extension and rendered the respective view:
preg_replace('/\.html$/','',$view);
$this->render(null,'default',$view);
While calling the pages added 'ext' to be .html
According to this page you can do something like this
Router::connect('/(.*).html', array('controller' => 'pages', 'action' => 'display'));
but as you are talking about extensions, that may have other consequences.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With