Routing in CakePHP to vanity urls

一个人想着一个人 提交于 2019-12-24 07:37:38

问题


I was wondering if there was an easy and best practices way to make routes in CakePHP (routes.php file) to map userIDs to a vanity url?

I have (terrible way to do this) the following test code in my routes page:

$users = array
(
    1 => 'firstname-lastname',
    2 => 'firstname2-lastname2'
);   

//profiles
foreach($users as $k => $v)
{
    // LESSONS (Profiles)
    Router::connect('/:user', array('controller' => 'teachers', 'action' => 'contentProfile', $k),
        array('user' => '(?i:'.$v.')'));
}

The above code routes my teachers controller with conProfile as the action from:

mydomain.com/teachers/contentProfile/1
to
mydomain.com/firstname-lastname

Can I connect to the db from the routing page? Is that not a good idea in terms of performance? Let me know what's the best way to do this.


回答1:


You can create a custom route class that will look up passed urls in the database and translate them to the correct user id. Setting a long cache time should mitigate any performance impact of hitting the DB.

The book documentation is a little thin, however, but the basic structure is this:

class TeachersRoute extends CakeRoute {

  /**
   * Modify incoming parameters so that controller receives the correct data
   */
  function parse($url) {
    $params = parent::parse($url);

    // Add / modify parameter information

    // The teacher id should be sent as the first value in the $params['pass'] array

    return $params;
    // Or return false if lookup failed
  }

  /**
   * Modify parameters so calls like HtmlHelper::url() output the correct value
   */
  function match($url) {
    // modify parameters

    // add $url['slug'] if only id provided

    return parent::match($url);
  }

And then in your routes:

Router::connect(
  '/:slug', 
  array(
    'controller' => 'teachers', 
    'action' => 'contentProfile'
  ), 
  array(
    'slug' => '[a-zA-Z0-9_-]+'
    'routeClass' => 'TeachersRoute',
  )
);


来源:https://stackoverflow.com/questions/13127337/routing-in-cakephp-to-vanity-urls

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!