Commit ddb7141e by Qiang Xue

doc update about behavior.

parent 0129efcb
...@@ -2,7 +2,7 @@ Behaviors ...@@ -2,7 +2,7 @@ Behaviors
========= =========
A behavior (also knows as *mixin*) can be used to enhance the functionality of an existing component without modifying the component's A behavior (also knows as *mixin*) can be used to enhance the functionality of an existing component without modifying the component's
code. In particular, a behavior can "inject" its own methods and properties into the component, making them directly accessible code. In particular, a behavior can "inject" its public methods and properties into the component, making them directly accessible
via the component itself. A behavior can also respond to events triggered in the component, thus intercepting the normal via the component itself. A behavior can also respond to events triggered in the component, thus intercepting the normal
code execution. Unlike [PHP's traits](http://www.php.net/traits), behaviors can be attached to classes at runtime. code execution. Unlike [PHP's traits](http://www.php.net/traits), behaviors can be attached to classes at runtime.
...@@ -11,10 +11,12 @@ Using behaviors ...@@ -11,10 +11,12 @@ Using behaviors
A behavior can be attached to any class that extends from [[yii\base\Component]]. In order to attach a behavior to a class, A behavior can be attached to any class that extends from [[yii\base\Component]]. In order to attach a behavior to a class,
the component class must implement the `behaviors` the component class must implement the `behaviors`
method. As an example, Yii provides the [[yii\behaviors\AutoTimestamp|AutoTimestamp]] behavior for automatically updating timestamp method. As an example, Yii provides the [[yii\behaviors\TimestampBehavior]] behavior for automatically updating timestamp
fields when saving an [[yii\db\ActiveRecord|Active Record]] model: fields when saving an [[yii\db\ActiveRecord|Active Record]] model:
```php ```php
use yii\behaviors\TimestampBehavior;
class User extends ActiveRecord class User extends ActiveRecord
{ {
// ... // ...
...@@ -23,7 +25,7 @@ class User extends ActiveRecord ...@@ -23,7 +25,7 @@ class User extends ActiveRecord
{ {
return [ return [
'timestamp' => [ 'timestamp' => [
'class' => 'yii\behaviors\AutoTimestamp', 'class' => TimestampBehavior::className(),
'attributes' => [ 'attributes' => [
ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'],
ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at', ActiveRecord::EVENT_BEFORE_UPDATE => 'updated_at',
...@@ -34,9 +36,38 @@ class User extends ActiveRecord ...@@ -34,9 +36,38 @@ class User extends ActiveRecord
} }
``` ```
In the above, the `class` value is a string representing the fully qualified behavior class name. In the above, the name `timestamp` can be used to reference the behavior through the component. For example, `$user->timestamp`
All of the other key-value pairs represent corresponding public properties of the [[yii\behaviors\AutoTimestamp|AutoTimestamp]] gives the attached timestamp behavior instance. The corresponding array is the configuration used to create the
class, thereby customizing how the behavior functions. [[yii\behaviors\TimestampBehavior|TimestampBehavior]] object.
Besides responding to the insertion and update events of ActiveRecord, `TimestampBehavior` also provides a method `touch()`
that can assign the current timestamp to a specified attribute. As aforementioned, you can access this method directly
through the component, like the following:
```php
$user->touch('login_time');
```
If you do not need to access a behavior object, or the behavior does not need customization, you can also
use the following simplified format when specifying the behavior,
```php
use yii\behaviors\TimestampBehavior;
class User extends ActiveRecord
{
// ...
public function behaviors()
{
return [
TimestampBehavior::className(),
// or the following if you want to access the behavior object
// 'timestamp' => TimestampBehavior::className(),
];
}
}
```
Creating your own behaviors Creating your own behaviors
...@@ -54,7 +85,7 @@ class MyBehavior extends Behavior ...@@ -54,7 +85,7 @@ class MyBehavior extends Behavior
} }
``` ```
To make it customizable, like [[yii\behaviors\AutoTimestamp]], add public properties: To make it customizable, like [[yii\behaviors\TimestampBehavior]], add public properties:
```php ```php
namespace app\components; namespace app\components;
......
...@@ -152,7 +152,6 @@ Yii Framework 2 Change Log ...@@ -152,7 +152,6 @@ Yii Framework 2 Change Log
- Removed `yii\web\Request::getPost()`, `getPut()`, `getDelete()`, `getPatch()` in favor of `getBodyParam()` (cebe) - Removed `yii\web\Request::getPost()`, `getPut()`, `getDelete()`, `getPatch()` in favor of `getBodyParam()` (cebe)
- Renamed `yii\web\Request::get()` to `getQueryParams()` and `getRestParams()` to `getBodyParams()` (cebe) - Renamed `yii\web\Request::get()` to `getQueryParams()` and `getRestParams()` to `getBodyParams()` (cebe)
- Added `yii\web\Request::get($name = null, $defaultValue = null)` and `yii\web\Request::post($name = null, $defaultValue = null)` (samdark) - Added `yii\web\Request::get($name = null, $defaultValue = null)` and `yii\web\Request::post($name = null, $defaultValue = null)` (samdark)
- Chg #2057: AutoTimestamp attributes defaults changed from `create_time` and `update_time` to `created_at` and `updated_at` (creocoder)
- Chg #2059: Implemented git-flavored file excluding/filtering for `FileHelper` (nineinchnick) - Chg #2059: Implemented git-flavored file excluding/filtering for `FileHelper` (nineinchnick)
- Chg #2063: Removed `yii\web\Request::acceptTypes` and renamed `yii\web\Request::acceptedContentTypes` to `acceptableContentTypes` (qiangxue) - Chg #2063: Removed `yii\web\Request::acceptTypes` and renamed `yii\web\Request::acceptedContentTypes` to `acceptableContentTypes` (qiangxue)
- Chg #2157: The '*' category pattern will match all categories that do not match any other patterns listed in `I18N::translations` (qiangxue, Ragazzo) - Chg #2157: The '*' category pattern will match all categories that do not match any other patterns listed in `I18N::translations` (qiangxue, Ragazzo)
......
...@@ -10,7 +10,7 @@ use yii\behaviors\TimestampBehavior; ...@@ -10,7 +10,7 @@ use yii\behaviors\TimestampBehavior;
/** /**
* Unit test for [[\yii\behaviors\TimestampBehavior]]. * Unit test for [[\yii\behaviors\TimestampBehavior]].
* @see AutoTimestamp * @see TimestampBehavior
* *
* @group behaviors * @group behaviors
*/ */
...@@ -88,7 +88,7 @@ class TimestampBehaviorTest extends TestCase ...@@ -88,7 +88,7 @@ class TimestampBehaviorTest extends TestCase
} }
/** /**
* Test Active Record class with [[AutoTimestamp]] behavior attached. * Test Active Record class with [[TimestampBehavior]] behavior attached.
* *
* @property integer $id * @property integer $id
* @property integer $created_at * @property integer $created_at
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment