我想扩展一些内置的框架类,但我有一些我不清楚的观点:
Subfolder_ClassName
等类和ClassName.php
等文件命名为右?
答案 0 :(得分:5)
放置源文件
将它们置于/protected/components
之下是一个自然的选择。如果您以后开发了可以跨项目重用的更多通用类,您可以考虑将它们放在一个单独的目录中。
命名和目录结构
这取决于您的应用的规模。如果你没有很多组件(比如20下),那么恕我直言你不需要任何目录结构,components
目录对所有这些都是好的。另一种实用方法是将您的业务组件放入一个目录,将HTML组件放入另一个目录(例如widgets
)。
包括父类
您的配置文件应该包含以下部分:
// autoloading model and component classes
'import'=>array(
'application.models.activerecord.*',
'application.models.forms.*',
'application.components.*',
'application.classes.*',
// etc
),
此部分实际上导致在您的应用程序实例上调用CModule::setImport
来注册可以自动加载的类。如果你想扩展这些类,那么你不需要做任何事情。
如果某些组件依赖于上面未导入的Yii类,则需要在声明类之前使用Yiibase::import
显式导入它们。例如:
Yii::import('zii.widgets.jui.CJuiSlider');
class MySlider extends CJuiSlider {
// class contents here
}
注册路径的别名
如果要为导入路径创建自己的别名(例如,在导入类时可以引用路径myapp.components
),可以使用Yiibase::setPathOfAlias
执行此操作。一个好的地方是配置文件的最顶层:
<?php
Yii::setPathOfAlias('myapp.components','components/my/');
// This is the main Web application configuration. Any writable
// CWebApplication properties can be configured here.
return array(
// your whole app configuration is here, and you can now do this:
'import'=>array(
// ...other imports...
'myapp.components.*',
// ...other imports...
),
);
答案 1 :(得分:0)
如果要在yii-Framework中创建类的子类,是的,您可以将类定义文件放在project/protected/components
中。取决于您想要的最佳实践(即,您将创建几十个自定义类而不是一个或两个扩展FW类)但是将文件直接放在组件中应该在组织方面很好。
要继承,您可以按以下方式创建文件:
class MyNewClass extends CFrameworkClass
{
//All your stuff
}
请注意,按照惯例,yii框架类在它们前面有“C”(即CController),我没有在那里添加“C”(CFramwork ..),除了遵守约定之外的任何其他原因。