Yii的URL管理器规则从MySQL表中读取

时间:2013-06-28 15:51:03

标签: php url-rewriting url-routing yii

是否可以拥有这种数组:

 'urlManager' => array(
        'urlFormat' => 'path',
        'showScriptName' => false,
        'urlFormat' => 'path',
        'rules' => array(
            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

            '/admin' => '/admin/home',
            '/admin/<controller:\w+>' => '/admin/<controller>',
            '/admin/<controller:\w+>/<action:\w+>/<id:\d+>' => '/admin/<controller>/<action>',
            '/admin/<controller:\w+>/<action:\w+>' => '/admin/<controller>/<action>',
        ),
    ),

从数据库表中读取?

为什么:我正在制作一个CMS,我要在其中定义自定义的 类别,网页和帖子 ,这样我就不会不使用基本控制器。

示例:我的页面控制器是PagesController,我可以在URL管理器中制定如下规则:

/pages/some-page-alias

我希望能够将/pages//categories//posts/更改为本地化的内容,这意味着可以更改它,即在波斯尼亚语中:

/kategorije/ => /categories/,
/stranice/ => /pages/,
/clanci/ => /posts/,

是否有解决方案,如何做到这一点?

是的,我没有尝试任何东西,因为我不知道......

2 个答案:

答案 0 :(得分:1)

你可以这样做:

'urlManager' => array(
        'urlFormat' => 'path',
        'showScriptName' => false,
        'urlFormat' => 'path',
        'rules' => array(
            'kategorije/<id:\d+>' => 'category/view',
            'kategorije/<action:\w+>/<id:\d+>' => 'category/<action>',
            'kategorije/<action:\w+>' => 'category/<action>',

            '<controller:\w+>/<id:\d+>' => '<controller>/view',
            '<controller:\w+>/<action:\w+>/<id:\d+>' => '<controller>/<action>',
            '<controller:\w+>/<action:\w+>' => '<controller>/<action>',

            '/admin' => '/admin/home',
            '/admin/<controller:\w+>' => '/admin/<controller>',
            '/admin/<controller:\w+>/<action:\w+>/<id:\d+>' => '/admin/<controller>/<action>',
            '/admin/<controller:\w+>/<action:\w+>' => '/admin/<controller>/<action>',
        ),
    ),

URLManager按首先列出的内容划分优先级。因此,如果您在标准规则之上放置自定义规则,它将首先运行这些规则。一旦找到适用它的规则就会爆发。

答案 1 :(得分:0)

至于我,你的问题不明确。

如果你想在DB中存储数组,你可以在serialize之前完成它。

如果您希望多个名称指向同一个控制器,则可以使用以下规则:

array(
     '<_c:(stranica|page)>/<id:\d+>'=>'myController/view',
)

在这种情况下,如果有任何网址

http://example.com/stranica/123
http://example.com/page/123
请求

,它将指向

http://example.com/myController/view?_c=stranica&id=123
http://example.com/myController/view?_c=page&id=123

相应。请参阅API中的CUrlManager示例。