helpers.md 1.91 KB
Newer Older
Qiang Xue committed
1 2 3
Helper Classes
==============

Qiang Xue committed
4 5 6
Yii provides many helper classes to help simplify some common coding tasks, such as string/array manipulations,
HTML code generation. These helper classes are organized under the `yii\helpers` namespace and
are all static classes (meaning they contain only static properties and methods and should not be instantiated).
Qiang Xue committed
7 8
You use a helper class by directly calling its static method, like the following,

Qiang Xue committed
9
```php
Qiang Xue committed
10 11 12
use yii\helpers\ArrayHelper;

$c = ArrayHelper::merge($a, $b);
Qiang Xue committed
13
```
Qiang Xue committed
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38

Extending Helper Classes
------------------------

Static classes are typically hard to customize because when you use them, you already hardcode the class names
in your code, and as a result your customized versions will not get used unless you do some global replacement in your code.

To solve this problem, Yii breaks each helper into two classes: one is base class (e.g. `BaseArrayHelper`)
and the other the concrete class (e.g. `ArrayHelper`). When you use a helper, you should only use the concrete version.

If you want to customize a helper, e.g., `ArrayHelper`, do the following steps:

1. Name your class the same as the concrete class provided by Yii, including the namespace part, e.g.,
   `yii\helpers\ArrayHelper`;
2. Extend your class from the base class, e.g., `class ArrayHelper extends \yii\helpers\BaseArrayHelper`;
3. In your class, override any method or property as your want, or add new methods or properties;
4. In your application that you plan to use your own version of the helper class, include the following
   line of code in the bootstrap script:

```php
Yii::$classMap['yii\helpers\ArrayHelper'] = 'path/to/ArrayHelper.php';
```

The Step 4 above will instruct Yii class autoloader to load your version of the helper instead of the one
included in the Yii distribution.
Qiang Xue committed
39 40 41

> Tip: You can also use `Yii::$classMap` to replace ANY core Yii class, not necessarily helper classes,
> with your own customized version.