2011-09-17 100 views
4

我想延长一些内置的框架类的文件,但我有几点我并不清楚:如何延长Yii框架类和在哪里放置

  1. 我想我应该把我的组件文件夹下的课程,这是正确的地方?
  2. 我应该如何命名类似Subfolder_ClassName以及像ClassName.php这样的文件?
  3. 我该如何继承?默认包含路径不包括框架本身。我假设没有我改变包含路径/开始使用自动载入功能或者在我的代码中简单地硬编码包含,就有内置的方法来做到这一点。

对不对?

回答

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... 
    ), 
); 
0

如果你想在yii-Framework中创建一个类的子类,是的,你可以将你的类定义文件放在project/protected/components之内。取决于你想要的最佳实践(即你将创建几十个自定义类,而不是扩展FW类的一个或两个),但将文件直接放在组件中应该没问题。

要继承你可以沿着这些路线创建文件:

class MyNewClass extends CFrameworkClass 
{ 
    //All your stuff 

} 

注意,按照约定的警予framwork类有“C”在他们面前(即CController),我不加入“C”在那里(CFramwork ..)除了遵守公约之外的任何其他原因。

+0

所以,我创建了一个子文件夹下的组件,并试图只是,系统无法找到父类(籽亿/部件/ CMenu的) –