0

是否有可能拥有这种数组:

 '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,我想在其中定义一个自定义类别、页面和帖子库,这样我就不会使用基本控制器。

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

/pages/some-page-alias

我希望能够更改/pages//categories/并且/posts/本地化,这意味着能够更改它,即在波斯尼亚语上:

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

有没有解决方案,如何解决?

顺便说一句,我没有尝试过任何东西,因为我不知道......

4

2 回答 2

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 按首先列出的内容进行优先级排序。因此,如果您在标准规则之上添加自定义规则,它将首先运行这些规则。一旦找到适用的规则,它就会爆发。

于 2013-06-28T16:01:45.127 回答
0

至于我,你的问题不清楚。

如果您想将数组存储在 DB 中,您可以通过serialize'ing 之前的方式来实现。

如果您想要多个名称指向同一个控制器,您可以使用这样的规则:

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

在这种情况下,如果任何 url

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示例。

于 2013-06-28T16:43:06.963 回答