PHP Yii中的路由如何工作?

时间:2014-03-17 18:04:20

标签: php yii routing

我来自Rails和codeIgniter背景,我习惯看到routes.rb或routes.php,但是从Yii框架中读取一些文档,我无法弄清楚路由是如何工作的?它是由配置文件自动完成的吗?如果是,那怎么样?

查看main.php配置文件,我相信以下几行创造了魔力:

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

但为什么控制器标签内部有w +? id标签如何工作?

为什么网址必须以index.php开头?为什么不能简单地说 本地主机/ controllername /动作?

2 个答案:

答案 0 :(得分:1)

首先,这是一个很好的指南:http://www.larryullman.com/2013/02/18/understanding-routes-in-the-yii-framework/

为了回答你的问题(或其中一些问题),你粘贴的线条基本上告诉Yii如何处理这些问题&#39;漂亮&#39; url,例如它需要一个控制器名称,然后是一个id(d +表示数字),它将路由到控制器/视图。

另请注意,控制器和操作有命名约定,例如。 UserController,actionView()。

关于你的index.php问题,这是Nginx / Apache htaccess的工作,它在CodeIgniter中也应该是相同的。

希望这会有所帮助。

P.S。您可以在此处阅读有关网址的更多信息http://www.yiiframework.com/doc/guide/1.1/en/topics.url

答案 1 :(得分:1)

欢迎来到Yii! URL管理器功能非常强大,您可以几乎完成所需的任何操作。

网址不必以index.php开头 - 请尝试以下设置:

'urlManager'=>array(
    'showScriptName' => false, // Removes index.php from URL
    'urlFormat'=>'path',       // Uses /controller/action rather than query vars
    'useStrictParsing'=>true,  // Prevents generic rule matching
    'rules'=>array(
    ),
),

对于规则中的+w,这是正则表达式 - 或者更确切地说是Yii的正则表达式的基本版本。您可以在路线中设置参数,并使它们仅匹配某些正则表达式模式:

// URL /articles/an-article-321 routed to ArticleController and ActionView Method
// I'm setting up the params $_GET['slug'] and $_GET['id']
 'articles/<slug:[a-z-]+>-<id:\d+>' => 'article/view'