【问题标题】:CakePHP (2.0) Dynamic URLsCakePHP (2.0) 动态 URL
【发布时间】:2011-11-01 13:36:45
【问题描述】:

我目前正在研究 CakePHP 2.0 并希望将旧的 1.3 项目转换为 2.0。我打算从头开始,因为项目中有很多代码可以做得更好。

其中之一是动态 URL、多语言项目,甚至 URL 更改为所选语言。例如:

英文:/pages/new-article 荷兰语:/paginas/nieuw-artikel

两者都会去PagesController::display();

注意:URL 可以更长,页面可以有子页面,这些子页面也会添加到 URL 中。例如:/pages/new-article/article-subpage

现在,我以前的做法是为所有事情制定一个特定操作的路线。喜欢 * 去PagesController::index();

但这似乎会减慢应用程序的速度,并带来很多问题。

所以我的问题是,有没有更简单的方法来做到这一点?

我不想硬编码任何东西,我应该能够将/pages/article 更改为/page/article 而无需更改代码。

注意:如果您知道在 1.2 或 1.3 中执行此操作的方法,那也很好,2.0 并没有那么不同。

【问题讨论】:

    标签: php cakephp url-routing


    【解决方案1】:

    我想通了,显然 CakePHP 1.3 和 2.0 允许您创建自定义路由类。它在此处的文档中:http://book.cakephp.org/2.0/en/development/routing.html?highlight=route#custom-route-classes

    所以基本上你需要做的是创建一个文件APP/Lib/Routing/Route/UrlRoute.php,内容如下:

    class UrlRoute extends CakeRoute{
    
        public function parse($url){
            $params = parent::parse($url);
    
            # Here you get the controller and action from a database.
    
            // tmp
            $params['controller'] = 'pages';
            $params['action'] = 'index';
    
            return $params;
        }
    }
    

    在您的APP/Config/routes.php 中输入以下内容:

    App::import('Lib', 'Routing/Route/UrlRoute');
    Router::connect('/*', array('controller' => 'tests', 'action' => 'index'), array('routeClass' => 'UrlRoute'));
    

    我认为真正的挑战是让通常传递给函数的参数恢复工作。 func_get_args() 现在返回域名后面的所有内容。如果您使用额外的参数,则从数据库中检索 URL。可能需要缓存每个 URL。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-22
      • 2012-12-29
      • 2012-01-02
      • 1970-01-01
      • 2012-12-02
      • 1970-01-01
      • 2012-04-13
      • 1970-01-01
      相关资源
      最近更新 更多