我来自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 /动作?
答案 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)
网址不必以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'