The way you see Yii framework will fundamentally shape how you understand and work with Yii. Yii implements the model-view-controller pattern which most frameworks have adopted. It is designed from the ground up to be modular. This helps any web application you develop to be separated into separate and interchangeable components. A module is a self-contained software that encapsulates a functionality. This should not be confused with an extension in Yii.

The importance of such an approach as said before, helps you to break down projects into smaller projects you can work on and maintain independently. One can create a user authentication and management module which can be used together with other modules in your Yii web application. Yii module from architectural view is a folder that consists of models, views, controllers and any supporting files.

The CModule class provides the bases for the modularity in Yii. It provides the interface that defines the elements that are provided and required by any Yii module.

The properties and methods that are important for our discussion are

string basePath
public string getBasePath()
public void setBasePath(string $path)

The basePath returns the root directory of the module. The importance of this property is that one can place a module anywhere in the file system and set the basePath property to that location.

array modules
public array getModules()
public void setModules(array $modules)
CModule parentModule -read-only
public CModule getParentModule()

A module can contain other modules which can contain other modules as well. The former is the parent module and the later child module. The modules property of CModule is used to declare child modules. After initialization of the child modules, their parentModule property will be set to the parent module.

Here is an example of how to configure sub-modules. Each array element represents a single module, which can be either a string representing the module ID or an ID-configuration pair representing a module with the specified ID and the initial property values. For example, the following array declares two modules:

array(
 'admin', // a single module ID
 'payment'=>array( // ID-configuration pair
    'server'=> 'paymentserver.com',//server property value of payment module
  ),
)

A module is created by calling it constructor. For most part, you will not initialize the module yourself; the framework will do that for you.

/**
* Constructor.
* @param string $id the ID of this module
* @param CModule $parent the parent module (if any)
* @param mixed $config the module configuration. It can be either an array or
* the path of a PHP file returning the configuration array.
*/
public void __construct(string $id, CModule $parent, mixed $config=NULL)

The last important property is the behaviour

array $behaviors;
the behaviors that should be attached to the module.