How can I append .html to all my URLs in cakephp?

前端 未结 7 1115
粉色の甜心
粉色の甜心 2020-12-19 11:18

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 d

相关标签:
7条回答
  • 2020-12-19 11:37

    Its quite Simple,Open file app/config/routes.php and just add

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

    Above the line

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

    Now you can access even your controller methods with .html extensions .

    I hope it helps .

    0 讨论(0)
  • 2020-12-19 11:46

    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

    0 讨论(0)
  • 2020-12-19 11:47

    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.

    0 讨论(0)
  • 2020-12-19 11:52

    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')
    );
    
    0 讨论(0)
  • 2020-12-19 11:58

    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.

    0 讨论(0)
  • 2020-12-19 12:01

    As Routes Configuration - File extensions documentation section says, you could use:

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

    This will tell the router to remove any matching file extensions, and then parse what remains.

    0 讨论(0)
提交回复
热议问题