4.0 KiB
Basic concepts of Yii
Component and Object
Classes of the Yii framework usually extend from one of the two base classes Object and Component. These classes provide useful features that are added automatically to all classes extending from them.
The Object
class provides the configuration and property feature.
The Component
class extends from Object
and adds event handling and behaviors.
Object
is usually used for classes that represent basic data structures while Component
is used for
application components and other classes that implement higher logic.
Object Configuration
The Object class introduces a uniform way of configuring objects. Any descendant class of Object should declare its constructor (if needed) in the following way so that it can be properly configured:
class MyClass extends \yii\base\Object
{
public function __construct($param1, $param2, $config = [])
{
// ... initialization before configuration is applied
parent::__construct($config);
}
public function init()
{
parent::init();
// ... initialization after configuration is applied
}
}
In the above, the last parameter of the constructor must take a configuration array
which contains name-value pairs for initializing the properties at the end of the constructor.
You can override the init()
method to do initialization work that should be done after
the configuration is applied.
By following this convention, you will be able to create and configure a new object using a configuration array like the following:
$object = Yii::createObject([
'class' => 'MyClass',
'property1' => 'abc',
'property2' => 'cde',
], $param1, $param2);
Path Aliases
Yii 2.0 expands the usage of path aliases to both file/directory paths and URLs. An alias
must start with a @
character so that it can be differentiated from file/directory paths and URLs.
For example, the alias @yii
refers to the Yii installation directory while @web
contains base URL for currently
running web application. Path aliases are supported in most places in the Yii core code. For example,
FileCache::cachePath
can take both a path alias and a normal directory path.
Path alias is also closely related with class namespaces. It is recommended that a path
alias be defined for each root namespace so that you can use Yii the class autoloader without
any further configuration. For example, because @yii
refers to the Yii installation directory,
a class like yii\web\Request
can be autoloaded by Yii. If you use a third party library
such as Zend Framework, you may define a path alias @Zend
which refers to its installation
directory and Yii will be able to autoload any class in this library.
Autoloading
All classes, interfaces and traits are loaded automatically at the moment they are used. There's no need to use
include
or require
. It is, as well, true for Composer-loaded packages and Yii extensions.
Autoloader works according to PSR-0. That means namespaces and class, interface and trait names should correspond to file system paths except root namespace path that is defined by an alias.
For example, if standard alias @app
refers to /var/www/example.com/
then \app\models\User
will be loaded from
/var/www/example.com/app/models/User.php
.
Custom alias may be added using the following code:
Yii::setAlias('shared', realpath('~/src/shared'));
Additional autoloaders may be registered using standard PHP spl_autoload_register
.
Helper classes
Helper class typically contains static methods only and used as follows:
use \yii\helpers\Html;
echo Html::encode('Test > test');
There are several classes provided by framework:
- ArrayHelper
- Console
- FileHelper
- Html
- HtmlPurifier
- Inflector
- Json
- Markdown
- Security
- StringHelper
- VarDumper