如何配置cakephp自定义路由类

时间:2015-01-14 16:08:56

标签: php cakephp url-routing

我在cakephp 2.x中创建了自定义路由器类,我只关注this博文。在我的应用程序中,我没有/ Routing / Route文件夹,我创建文件夹并将StaticSlugRoute.php文件放入其中。在该文件中包含以下代码

<?php
 App::uses('Event', 'Model');
 App::uses('CakeRoute', 'Routing/Route');
 App::uses('ClassRegistry', 'Utility');

 class StaticSlugRoute extends CakeRoute {

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

?>

我添加了此代码,但它似乎没有工作(事件/索引工作正常)。我想路由&#39; www.example.com/events/event title&#39; url to&#39; www.example.com/events/index/id'。有什么我想念的东西,或者我需要将此代码导入任何地方。如果可以重定向此类型的(&#39; www.example.com/event title&#39;)网址。

1 个答案:

答案 0 :(得分:3)

自定义路由类应位于/ Lib / Routing / Route而不是/ Routing / Route。

然后,您需要在routes.php文件中导入自定义类。

 App::uses('StaticSlugRoute', 'Lib/Routing/Route');
 Router::connect('/events/:slug', array('controller' => 'events', 'action' => 'index'), array('routeClass' => 'StaticSlugRoute'));

这告诉CakePhp将自定义路由类用于看起来像/ events /:slug的URL(例如:/ events / event-title)。

备注:不要忘记正确索引相应的数据库字段,以避免在行数增加时出现严重的性能损失。