CakePHP(2.0)动态URL

Kev*_*rne 1 php cakephp url-routing

我目前正在研究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并没有那么不同.

Kev*_*rne 5

好吧,我想通了,显然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;
    }
}
Run Code Online (Sandbox Code Playgroud)

并在你的APP/Config/routes.php你提出以下内容:

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

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