如何扩展Yii框架类以及放置文件的位置

Ita*_*vka 4 php yii project-layout

我想扩展一些内置的框架类,但我有一些我不清楚的观点:

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

对?

Jon*_*Jon 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
),
Run Code Online (Sandbox Code Playgroud)

这部分实际上导致在CModule::setImport您的应用程序实例上调用以注册可以自动加载的类.如果你想扩展这些类,那么你不需要做任何事情.

如果某些组件依赖于上面未导入的Yii类,则需要Yiibase::import在声明类之前显式导入它们.例如:

Yii::import('zii.widgets.jui.CJuiSlider');

class MySlider extends CJuiSlider {
    // class contents here
}
Run Code Online (Sandbox Code Playgroud)

注册路径的别名

如果要为导入路径创建自己的别名(例如,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...
   ),
);
Run Code Online (Sandbox Code Playgroud)