`
shareHua
  • 浏览: 14484 次
  • 性别: Icon_minigender_1
  • 来自: 群:57917725
社区版块
存档分类
最新评论

从Yii1.1升级到Yii2(翻译自yii2 / docs / guide / upgrade-from-v1.md )

    博客分类:
  • yii2
阅读更多
【【Yii2 交流群 146409855】】
在这个章节,我们列出从Yii1.1到Yii2.0的主要改动。我们希望这些列表将帮您更容易的从Yii1.1升级,和更快的在您现有的Yii认知上掌握Yii2.0。

域名空间
--------------------
Yii2.0最明显的改动是使用了域名空间。基本上每个核心类都用域名空间。例如:yii\web\Request。“C”开头不再用于类名称了。域名空间的取名按照目录格式。例如,yii\web\Request指的是在Yii框架目录下的类文件web/Request.php。因Yii的类加载功能,你可以任意使用任何核心类而无需在类文件中包含。


组件和类
--------------------
Yii2.0把1.1中的CComponent类拆分为2个类: Object and Component。 Object类是轻量级的基本类,允许通过 getters和 setters来定义类的属性。Component类继承自Object,支持event和behavior 特征。
如果你的类不需要event和behavior 特征,你将考虑使用Object 作为基类。这通常用于表示基本数据结构。


对象配置
--------------------
`Object`类引入一个统一的方法配置对象。任何`Object`子类将按照如下方式声明它的构造函数(如果需要),以便能适当的配置:
class MyClass extends \yii\Object
{
    public function __construct($param1, $param2, $config = array())
    {
        // ... 在配置生效前初始化

        parent::__construct($config);
    }

    public function init()
    {
        parent::init();

        // ... 在配置生效后初始化
    }
}
上例,最后一个构造函数的参数必须是一个配置数组包含name-value对用于在构造函数最后初始化属性??。你可以重载`init()`方法在配置生效后完成初始化工作。
按以下惯例,你可以使用如下的配置数组创建和配置一个新的对象:

$object = Yii::createObject(array(
    'class' => 'MyClass',
    'property1' => 'abc',
    'property2' => 'cde',
), $param1, $param2);
```
事件
------
在Yii2.0不再需要通过`on`-method方式定义event。你可以使用任意事件名称,给event绑定一个handler,使用 `on`方法了:

```php
$component->on($eventName, $handler);
// 从handler上解绑,如下:
// $component->off($eventName, $handler);
```
当你绑定handler时,提供一些参数,可以在handler里面通过event的参数获取。

```php
$component->on($eventName, $handler, $params);
```
这样改变后,现在可以实现全局事件。给application实例的event简单的绑定触发器:

```php
Yii::$app->on($eventName, $handler);
....
// 这样将触发event,致使$handler被调用。
Yii::$app->trigger($eventName);
```

路径别称
----------
Yii2.0的扩展了路径别称用途,既支持file/directory 路径又支持URLs。别称必须以`@`字符开头,区别于file/directory路径和URLs。例如,`@yii`别称指的是Yii实例目录。Yii核心代码基本上都支持路径别称。例如,`FileCache::cachePath`能采取路径别称和正常目录路径??。
路径别称和类命名空间类似。建议每个根命名空间定义路径别称,这样无需而外的配置就可以用Yii的类自动加载器。例如,因为`@yii`指向Yii实例目录,某个类,例如`yii\web\Request`能让yii自动加载。如果你使用第三方类库,例如Zend Framework,你应定义路径别称`@Zend`指向它的实例目录,Yii将自动加载库里的任何类。

视图View
----
Yii2.0引入`View`类代表MVC模式中的view部分。它能通过"view"应用组件在全局配置。它能在任何视图文件中通过'$this'获取。相对于1.1的一个重大改变。
**`$this`在view文件中不再指向controller或者widget对象了。**它指向view对象用来呈送view文件。获取controller或者widget对象,现在你得使用`$this->context`.
因为你可以通过"view"应用组件获取view对象,所以现在你可以如下在你代码的任何位置呈送view文件,不一定要在controllers或者widets:

```php
$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);
```
还有,Yii 2.0不再有`CClientScript`。`View`已经取代它的角色并有重大改进。具体详见"assets"章节。
Yii2.0继续使用PHP作为主要模版语言,内建了两个流行的模版引擎支持:Smarty 和 Twig。Prado模版引擎不再支持了。用这些模版引擎,Smarty视图你只需用`tpl`作为文件扩展名,Twig视图是`twig`。你还可以配置`View::renderers`属性使用其他模版引擎。

模型Models
------
模型现在是用`formName()`方法返回一个关联的表单名??。这主要用于使用HTML表单收集用户输入给model。之前1.1通常是硬编码作为model的类名??。
Yii2.0引入了新的方法`scenarios()`来申明哪个场景哪些属性需要认证。子类将重载`scenarios()`,当`validate()`被调用时,返回scenarios列表和相应需要认证的属性。例如:


```php
public function scenarios()
{
    return array(
        'backend' => array('email', 'role'),
        'frontend' => array('email', '!name'),
    );
}
```
这个方法还可以决定哪些属性是safe哪些不是。特别是,在某个给定场景,如果一个属性在`scenarios()`的相应属性列表中而名称不是以`!`作为前缀的,将被认为*safe*。
因为以上的改变,Yii2.0不再有"safe" 和 "unsafe"认证器了。
如果你的model只有一个场景(很普遍),你不需要重载`scenarios()`,像1.1一样一切都正常工作。

控制Controllers
-----------
`render()` 和 `renderPartial()`返回呈送结果,而不是直接发送出来。你必须明确的`echo`,例如`echo $this->render(...);`。
引入一个新的方法`populate()`简化从用户输入到模型的数据产生。例如:

```php
$model = new Post;
if ($this->populate($_POST, $model)) {...}
// 同等于:
if (isset($_POST['Post'])) {
    $model->attributes = $_POST['Post'];
}
```


Widgets
-------
在2.0中使用widget很简单,主要使用`Widget`类的`begin()`, `end()` 和 `widget()`方法。例如:
```php
//注意你必须使用"echo"显示结果
echo \yii\widgets\Menu::widget(array('items' => $items));

//传递数组初始化对象属性
$form = \yii\widgets\ActiveForm::begin(array(
'options' => array('class' => 'form-horizontal'),
'fieldConfig' => array('inputOptions' => array('class' => 'input-xlarge')),
));
... form inputs here ...
\yii\widgets\ActiveForm::end();
```
之前1.1,你将必须通过`CBaseController`的beginWidget()`,
`endWidget()` and `widget()`方法输入字符串形式的widget类名称。
高级的IDE才支持上面的方法。


样式Themes
------
2.0中Themes完全不一样了。他们基于路径映射去"translate"源view到样式view。例如,
如果某个样式的路径映射是`array('/www/views' => '/www/themes/basic')`,那么view文件`/www/views/site/index.php`的样式版本将为`/www/themes/basic/site/index.php`。
如此,theme可以应用到任何view文件,甚至是离开controller和widget的context。
再没有 `CThemeManager`了,取代的方法是`theme`作为一个可配置属性可在"view"应用组件中配置。



控制台应用Console Applications
--------------------
Console applications现在由contrllers构成,例如Web应用。实际上console controllers和Web contrllers使用同一个controller基类。
每个console controller 类似于1.1中的`CConsoleCommand`。由一个或多个actions组成。你可以使用`yii <route>`命令去执行一个console命令,`<route>`代表某个controller route(例如:`sitemap/index`)。剩余的匿名参数被传递到相应的controller action方法,命名参数被当作全局选项在`globalOptions()`中声明??。
Yii2.0支持从注释段中自动生成命令帮助信息。
分享到:
评论

相关推荐

    yii-docs-1.1.17.467ff50

    yii-docs-1.1.17.467ff50

    yii-advanced-app-2.0.10.tgz

    这个版本是“yii-advanced-app-2.0.10.tgz”,它是一个压缩包,包含了 Yii 2 框架的高级应用模板,版本号为 2.0.10。这个版本可能包含了一些修复和改进,以提供更稳定和高效的开发环境。 Yii 2 是一个基于组件的高...

    yii扩展--ip地址识别--QQWRY

    YII扩展 IP地址识别组件 采用QQWRY数据库 使用条件: 解压到相应的目录。 确定QQWRY.DAT 放入 protacted/data 确定IpLocation 放入 protacted/components 修改main.php 'components'=&gt;array( //......

    yiren-p8Yii-v17323.apk

    yiren-p8Yii-v17323.apk

    Agile.Web.Application.Development.with.Yii1.1.and.PHP5

    《Agile.Web.Application.Development.with.Yii1.1.and.PHP5》这本书是关于敏捷Web应用开发的专业指南,特别关注了使用Yii 1.1框架和PHP 5编程语言进行开发的方法。Yii是一个高效的、开源的PHP框架,适用于构建大型...

    yii-docs-2.0-zh-cn.tar.gz

    它覆盖了从安装和设置环境到开发高级特性的全过程。同时,英文版本的文档提供了更广泛的社区支持和技术更新,适合有一定基础的开发者查阅最新信息。 总的来说,"yii-docs-2.0-zh-cn.tar.gz"提供的离线文档是学习和...

    yii-1.1.8.r3324

    "yii-1.1.8.r3324" 版本是 Yii 框架的一个特定发行版,它在 1.1.x 系列中的一个稳定版本。这个版本号表示该框架在 1.1 主线版本基础上的第 3324 个修订版本。接下来,我们将深入探讨 Yii 框架以及这个版本的一些关键...

    yiren-p8Yii-ve2467575-x64.apk

    yiren-p8Yii-ve2467575-x64.apk

    Packtpub.Agile.Web.Application.Development.with.Yii1.1.and.PHP5.Aug.2010.rar

    10. **部署与性能优化**:分享最佳实践,指导如何将Yii应用部署到生产环境,并进行性能调优。 通过阅读这本书,读者将能够熟练掌握Yii1.1框架与PHP5的结合使用,从而在敏捷开发环境中构建出高效、可扩展且易于维护...

    (完整版)Yii.1.1.Application.Development.Cookbook.Aug.2011

    ### Yii 1.1 应用程序开发食谱知识点概览 #### 一、书籍基本信息与版权信息 - **书名**:Yii 1.1 应用程序开发食谱 (August 2011 版本) - **作者**:Alexander Makarov - **出版社**:Packt Publishing - **出版...

    yii1-ueditor-ext-1.1

    Yii1-UEditor-Ext-1.1 是一个专为Yii框架1.x版本设计的扩展插件,它将流行的富文本编辑器——百度UEditor整合到了Yii应用中。这个组件的目的是提供一个易于使用且功能丰富的文本编辑工具,使得开发者在处理用户内容...

    yii-1.1.4.r2429.zip_mvc php_php yii_yii 1.1.4.rar_yii mvc_yii1.1

    "yii-1.1.4.r2429.zip_mvc php_php yii_yii 1.1.4.rar_yii mvc_yii1.1" 这个标题提到了 Yii 框架的一个特定版本,即 1.1.4 版本的修订版 2429,同时也提及了 MVC 设计模式和 PHP 语言。在描述中,我们了解到 Yii 被...

    yii1.1-user-auth-module:Yii 1.1用户认证模块

    Yii 1.1用户身份验证模块 创建该模块是为了授权Yii 1.1应用程序中的用户。 模块支持基本的身份验证,登录和密码还原过程。 该模块还包含用户和ip阻止机制,以防止暴力破解。 不客气! 如果您想添加或修改某些模块...

    yii-docs-1.1.7.r3135.zip

    在yii-docs-1.1.7.r3135中,可以看到各种组件的详细文档,帮助理解如何使用和定制。 2. MVC(模型-视图-控制器)架构: Yii 实现了经典的MVC设计模式,分离了业务逻辑、数据处理和用户界面,使代码结构清晰。模型...

    Ajax-yii2-widgets.zip

    Ajax-yii2-widgets.zip,yii2框架的小部件集合,ajax代表异步javascript和xml。它是多种web技术的集合,包括html、css、json、xml和javascript。它用于创建动态网页,其中网页的小部分在不重新加载网页的情况下更改。

    应用yii1.1和php5进行敏捷web开发.chm--中文版

    应用yii1.1和php5进行敏捷web开发.chm--中文版

    yii1.1版本资料整理

    4. 应用生命周期管理:Yii框架有着清晰的应用生命周期,从预初始化、自动加载器建立、核心组件注册,到应用配置加载、初始化和请求处理,都按顺序进行。 5. 路由与模块:在Yii中,URL路由通过controller ID和action ...

    Yii 1.1.17.467 php框架

    安装Yii 1.1.17通常涉及下载ZIP文件,解压后放到服务器的根目录下,并配置好web服务器的文档根目录。接着,执行初始化脚本,创建基本项目结构。配置文件`config/main.php`可以定制应用的各个组件和设置。 四、开发...

Global site tag (gtag.js) - Google Analytics