Yii主张配置实现惯例。按照惯例,某人可以创建复杂的Yii应用,无需编写和维护复杂的配置。当然,在需要时几乎每一个方面,Yii仍然可以进行自定义配置。
下面我们描述建议Yii开发的惯例。 为了方便起见,我们假设WebRoot是Yii应用安装目录。
默认情况下,Yii确认的网址,格式如下:
http://hostname/index.php?r=ControllerID/ActionID
r GET变量指route ,可以通过Yii解析为控制器和动作。如果ActionID省略,控制器将采用默认的动作(通过CController::defaultAction指定);如果ControllerID也省略(或r变量也没有) ,该应用程序将使用默认的控制器(通过CWebApplication::defaultController定义) 。
CUrlManager的帮助下,有可能生成和识别更多的搜索引擎优化友好的URL ,如http://hostname/ControllerID/ActionID.html。此功能详细情况在URL Management。
Yii建议变量,函数和类类型使用骆驼方式命名,就是不用空格连接每个名字的单词。变量和函数名首字母小写,为了区分于类名称(如:$basePath ,runController(),LinkPager)。私有类成员变量,建议将他们的名字前缀加下划线字符(例如:$ _actionList) 。
因为在PHP5.3.0之前不支持命名空间,建议以一些独特的方式命名这些类,以避免和第三方名称冲突。出于这个原因,所有Yii框架类开头的字母"C"。
控制器类名的特别规则是,他们必须附上Controller后缀 。控制器的ID,然后定义为类名称首字母小写和Controller结尾。 例如,PageController类将有ID page 。这条规则使得应用更加安全。这也使得相关的网址控制器更加简洁(例如/index.php?r=page/index替代/index.php?r=PageController/index) 。
配置是数组关键值对。每个键代表对象名称属性的配置,每个值相应属性的初始值。举个例子,array('name'=>'My application', 'basePath'=>'./protected')初始 name 和basePath 属性为其相应的数组值。
一个对象任何写入属性可以配置。如果没有配置,属性将使用它们的默认值。当设定属性,应该阅读相应的文件,以便使初始值设定正确。
文件命名和使用惯例取决于其类型。
类文件应命名应使用包含的公共类名字。例如,CController 类是在CController.php 文件。公共类是一个可用于任何其他类的类。每个类文件应包含最多一个公共类。私有类(类只能用于一个单一的公共类)可能和公有类存放在同一个文件。
视图文件应使用视图名称命名。例如,index视图在index.php文件里。视图文件是一个PHP脚本文件包含HTML和PHP代码,主要用来显示的。
配置文件可任意命名。配置文件是一个PHP脚本的唯一宗旨就是要返回一个关联数组代表配置。
Yii假定默认设置的目录用于各种目的。如果需要的话,他们每个可自定义。
WebRoot/protected: 这是application base directory 包括所有安全敏感的PHP脚本和数据文件。Yii有一个默认的别名为application代表此路径。这个目录和下面的一切文件目录,将得到保护不被网络用户访问。它可通过CWebApplication::basePath自定义。
WebRoot/protected/runtime: 此目录拥有应用程序在运行时生成的私有临时文件。这个目录必须可被Web服务器进程写。它可通过CApplication::runtimePath定制。
WebRoot/protected/extensions: 此目录拥有所有第三方扩展。它可通过CApplication::extensionPath定制。
WebRoot/protected/modules: 此目录拥有所有应用modules,每个代表作为一个子目录。
WebRoot/protected/controllers: 此目录拥有所有控制器类文件。它可通过CWebApplication::controllerPath定制。
WebRoot/protected/views:此目录包括所有的视图文件,包括控制视图,布局视图和系统视图。可通过CWebApplication::viewPath定制。
WebRoot/protected/views/ControllerID: 此目录包括某个控制类的视图文件。这里 ControllerID 代表控制类的ID。可通过CController::getViewPath定制。
WebRoot/protected/views/layouts: 此目录包括所有的布局视图文件。可通过CWebApplication::layoutPath来定制。
WebRoot/protected/views/system: 此目录包括所有的系统视图文件。系统视图文件是显示错误和例外的模板。可通过CWebApplication::systemViewPath定制。
WebRoot/assets: 此目录包括发布的asset文件。一个asset文件是一个私有文件,可能被发布来被Web用户访问。此目录必须Web服务进程可写。可通过CAssetManager::basePath定制。
WebRoot/themes: 此目录包括各种适用于应用程序的主题。每个子目录代表一个主题,名字为子目录名字。可通过CThemeManager::basePath定制。
如果我不小心在url上带了个参数r http://hostname/ControllerID/ActionID.html?r=xxx 怎么样呀
The controller ID is then defined as the class name with first letter in lower case and the word Controller truncated. 意思应该是 类名的首字母小写,然后切掉结尾的Controller 便是控制器的ID 原文翻译为 控制器的ID,然后定义为类名称首字母小写和Controller结尾。 似有不妥
Yii 遵循惯例大于配置原则。跟随惯例您可以不需编写和管理复杂的配置, 就可以创建复杂的Yii应用。当然,当需要时Yii可对几乎所有方面进行定制配置。
下面我们详细说明推荐的Yii编程惯例。为了方便,我们假设WebRoot是Yii应用程序 的安装目录。
URL 默认地,Yii识别以下格式URL: http://hostname/index.php?r=ControllerID/ActionID
Get变量r被Yii路由解释为控制器与动作。如果省略ActionId,控制器会使用默认动作。 (通过CController::defaultAction定义);如果ControllerId也省略(或r变量没有值) 应用程序会使用默认控制器(通过CWebAppication::defaultController定义)。