You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.0 KiB
163 lines
4.0 KiB
12 years ago
|
Upgrading from Yii 1.1
|
||
|
======================
|
||
|
|
||
|
In this chapter, we list the major changes introduced in Yii 2.0 since version 1.1.
|
||
|
We hope this list will make it easier for you to upgrade from Yii 1.1 and quickly
|
||
|
master Yii 2.0 based on your existing Yii knowledge.
|
||
|
|
||
|
|
||
|
Component and Object
|
||
|
--------------------
|
||
|
|
||
|
Yii 2.0 breaks the `CComponent` class in 1.1 into two classes: `Object` and `Component`.
|
||
|
The `Object` class is a lightweight base class that allows defining class properties
|
||
|
via getters and setters. The `Component` class extends from `Object` and supports
|
||
|
the event feature and the behavior feature.
|
||
|
|
||
|
If your class does not need the event or behavior feature, you should consider using
|
||
|
`Object` as the based class. This is usually the case for classes that represent basic
|
||
|
data structures.
|
||
|
|
||
|
|
||
|
Object Configuration
|
||
|
--------------------
|
||
|
|
||
|
The `Object` class introduces a convention for configuring objects. In general, any
|
||
|
descendant class of `Object` should follow this convention when declaring a constructor:
|
||
|
|
||
|
~~~
|
||
|
class MyClass extends \yii\Object
|
||
|
{
|
||
|
public function __construct($param1, $param2, $config = array())
|
||
|
{
|
||
|
// ...
|
||
|
parent::__construct($config);
|
||
|
}
|
||
|
|
||
|
public function init()
|
||
|
{
|
||
|
parent::init();
|
||
|
// ... at this point, all configurations have been applied ...
|
||
|
}
|
||
|
}
|
||
|
~~~
|
||
|
|
||
|
In descendant classes, you can override the `init()` method to do initialization work
|
||
|
that should be done after all configurations are applied.
|
||
|
|
||
|
By following this convention, you will be able to use the powerful object creation method via:
|
||
|
|
||
|
~~~
|
||
|
$object = Yii::createObject(array(
|
||
|
'class' => 'MyClass',
|
||
|
'property1' => 'abc',
|
||
|
'property2' => 'cde',
|
||
|
), $param1, $param2);
|
||
|
~~~
|
||
|
|
||
|
|
||
|
Events
|
||
|
------
|
||
|
|
||
|
There is no longer the need to define an `on`-method in order to define an event in Yii 2.0.
|
||
|
Instead, you can use whatever event names. To attach a handler to an event, you should
|
||
|
use the `on` method now:
|
||
|
|
||
|
~~~
|
||
|
$component->on($eventName, $handler);
|
||
|
// To detach the handler, use:
|
||
|
// $component->off($eventName, $handler);
|
||
|
~~~
|
||
|
|
||
|
When you attach a handler, you can now associate it with some parameters which can be later
|
||
|
accessed via the event parameter by the handler:
|
||
|
|
||
|
~~~
|
||
|
$component->on($eventName, $handler, $params);
|
||
|
~~~
|
||
|
|
||
|
Because of this change, you can now use "global" events. Simply trigger and attach handlers to
|
||
|
an event of the application instance:
|
||
|
|
||
|
~~~
|
||
|
Yii::$app->on($eventName, $handler);
|
||
|
....
|
||
|
// this will trigger the event and cause $handler to be invoked.
|
||
|
Yii::$app->trigger($eventName);
|
||
|
~~~
|
||
|
|
||
|
|
||
|
View
|
||
|
----
|
||
|
|
||
|
Yii 2.0 introduces a `View` class to represent the view part in the MVC pattern.
|
||
|
It can be configured globally through the "view" application component. It is also
|
||
|
accessible in any view file via `$this`. This is one of the biggest changes compared to 1.1:
|
||
|
**`$this` in a view file no longer refers to the controller or widget object.**
|
||
|
It refers to the view object that is used to render the view file. To access the controller
|
||
|
or the widget object, you have to use `$this->context` now.
|
||
|
|
||
|
Because you can access the view object through the "view" application component,
|
||
|
you can now render a view file like the following anywhere in your code, not necessarily
|
||
|
in controllers or widgets:
|
||
|
|
||
|
~~~
|
||
|
$content = Yii::$app->view->renderFile($viewFile, $params);
|
||
|
// You can also explicitly create a new View instance to do the rendering
|
||
|
// $view = new View;
|
||
|
// $view->renderFile($viewFile, $params);
|
||
|
~~~
|
||
|
|
||
|
Also, there is no more `CClientScript` in Yii 2.0. The `View` class has taken over its role
|
||
|
with significant improvements. For more details, please see the "assets" subsection.
|
||
|
|
||
|
TBD: built-in renderers
|
||
|
|
||
|
Models
|
||
|
------
|
||
|
|
||
|
Controllers
|
||
|
-----------
|
||
|
|
||
|
Themes
|
||
|
------
|
||
|
|
||
|
Console Applications
|
||
|
--------------------
|
||
|
|
||
|
I18N
|
||
|
----
|
||
|
|
||
|
Behaviors
|
||
|
---------
|
||
|
|
||
|
TBD
|
||
|
|
||
|
Action filters are replaced by behaviors (`ActiionFilter`).
|
||
|
|
||
|
|
||
|
Assets
|
||
|
------
|
||
|
|
||
|
Static Helpers
|
||
|
--------------
|
||
|
|
||
|
`ActiveForm`
|
||
|
------------
|
||
|
|
||
|
|
||
|
Query Builder
|
||
|
-------------
|
||
|
|
||
|
|
||
|
ActiveRecord
|
||
|
------------
|
||
|
|
||
|
User and Identity
|
||
|
-----------------
|
||
|
|
||
|
URL Management
|
||
|
--------------
|
||
|
|
||
|
Response
|
||
|
--------
|