CakePHP 2.10路由一个唯一的slug多个模型

CakePHP 2.10路由一个唯一的slug多个模型,cakephp,routes,url-routing,cakephp-2.0,cakephp-routing,Cakephp,Routes,Url Routing,Cakephp 2.0,Cakephp Routing,我一直试图通过允许/slug访问页面和用户模型/控制器来修改客户端网站。我已经阅读了CakePHP2路由书的所有内容,但它并没有详细介绍如何完成这样一件事。我试过这个: app/config/routes.php App::uses('SlugRoute', 'Lib/Routing/Route'); Router::connect('/:slug', ['controller' => 'pages', 'action' => 'display'], ['routeClass' =&

我一直试图通过允许/slug访问页面和用户模型/控制器来修改客户端网站。我已经阅读了CakePHP2路由书的所有内容,但它并没有详细介绍如何完成这样一件事。我试过这个:

app/config/routes.php

App::uses('SlugRoute', 'Lib/Routing/Route');
Router::connect('/:slug', ['controller' => 'pages', 'action' => 'display'], ['routeClass' => 'SlugRoute', 'model' => 'Page']);
Router::connect('/:username', ['controller' => 'users', 'action' => 'view'], ['routeClass' => 'SlugRoute', 'model' => 'User']);
app/Lib/Routing/Route/SlugRoute.php

App::uses('Page', 'Model');
App::uses('User', 'Model');
App::uses('CakeRoute', 'Routing/Route');
App::uses('ClassRegistry', 'Utility');

class SlugRoute extends CakeRoute {

  public function parse($url) {
      $params = parent::parse($url);
      if (empty($params)) {
          return false;
      }
          
      $model = $this->options['model'];
      
      $this->{$model} = ClassRegistry::init($model); 
      $result = $this->{$model}->find('first', [
          'conditions' => [
              $model.'.slug' => $params['slug'],
          ],
          'fields' => array($model.'.id'),
          'recursive' => -1,
      ]);

      if ($result) {
          $params['pass'] = array($result[$model]['id']);
          print_r($params);
          return $params;
      }
      
      return false;
  }
}

遗憾的是,这对页面有效,但对用户无效。我考虑过修改返回的参数并设置控制器/模型、视图等,但我认为这不是正确的方法。有什么建议或解决方案吗?

当路由器得到一个URL
/abc
,它如何知道这是slug还是用户名?如果两者都是呢?所有的鼻涕虫都是独一无二的。我们正在自定义路由器类中搜索适当的表,但是页面路由器似乎抓住了所有内容,用户路由器被完全忽略。