4

我想扩展一些内置的框架类,但是我有一些不清楚的地方:

  1. 我想我应该把我的类放在我的组件文件夹下,这是正确的地方吗?
  2. 我应该命名类Subfolder_ClassName和文件ClassName.php吗?
  3. 我该如何继承?默认包含路径不包括框架本身。我假设有一种内置方法可以做到这一点,而无需我更改包含路径/开始使用自动加载功能或只需在我的代码中硬编码包含。

对?

4

2 回答 2

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...
   ),
);
于 2011-09-17T02:15:40.867 回答
0

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

要继承,您可以按照以下方式创建文件:

class MyNewClass extends CFrameworkClass
{
    //All your stuff

} 

请注意,按照惯例,yii 框架类的前面有“C”(即 CController),我不会在此处添加“C”(CFramwork..),而不是为了遵守约定。

于 2011-09-17T02:05:31.840 回答