原文地址如下 http://yiifeed.com/news/366/yii-21-early-access (英文版)
翻译中文内容如下,翻译参与人员 google翻译参与99% 阿北参与1%,鉴于水平有限,有的地方可能有点绕口,但是整体理解是没问题的。
欢迎感兴趣的开发人员尝试yii2.1分支,该分支已经可以提前访问,它带来了很多新的方法并采用PSR标准。并且具有向后兼容性。虽然还没有开发完成,但是它已经准备好作为开发框架使用。
警告:Yii2.1当前还不是稳定版本并且可能随时break,在正式版本发布之前代码可能会发生明显变化。除非你已经做好后果处理方案,否则请不要尝试将其用于“生产”环境。
我们可以在github上浏览到yii2.1代码( 传送门 )并且使用composer安装版本为"2.1.x-dev"包。
Composer为了安装yii2.1版本,我们需要在composer.json文件中指定yiisoft/yii2的版本号为"2.1.x-dev"
{
"require": {
"yiisoft/yii2": "2.1.x-dev"
}
}
然后在所在目录执行 composer install就好了
macdeMacBook-Pro:2.1.x-dev mac$ composer install
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 6 installs, 0 updates, 0 removals
- Installing yiisoft/yii2-composer (2.0.5): Loading from cache
- Installing cebe/markdown (1.1.2): Loading from cache
- Installing psr/http-message (1.0.1): Loading from cache
- Installing psr/simple-cache (1.0.0): Downloading (100%)
- Installing psr/log (1.0.2): Loading from cache
- Installing yiisoft/yii2 (2.1.x-dev 422be4c): Cloning 422be4cd6d
yiisoft/yii2 suggests installing ezyang/htmlpurifier (version '~4.6' required at 'yii\helpers\HtmlPurifier' for 'html' data format support (e.g. 'yii\i18n\Formatter:asHtml()' and 'yii\helpers\StringHelper::truncateHtml()'))
Writing lock file
Generating autoload files
看到 yiisoft/yii2 (2.1.x-dev 422be4c)了吧。
注意:yii2.1放弃了自己的PHP类自动加载器而使用Composer提供的自动加载器,因此,你需要在composer.json中配置自动加载项,否则PHP没有办法找到我们我们项目中声明的类。
比如
{
"autoload": {
"psr-4": {"app\\": ""}
},
"autoload-dev": {
"psr-4": {"tests\\": "tests"}
},
...
}
如果项目文件的自动加载缺失,web应用程序将触发yii应用程序错误,例如“无法解析的请求 'site/error'”。
注意:在2.1版本中,一些之前的“yiisoft/yii2”包类已被移入单独的存储库。
- yiisoft/yii2-captcha: 验证码
- yiisoft/yii2-jquery: JQuery
- yiisoft/yii2-rest: rest风格的接口程序支持,这个原来在yii核心库中,现在作为扩展了
- yiisoft/yii2-mssql: MSSQL Server数据库的支持
- yiisoft/yii2-oracle: Oracle数据库的支持
- yiisoft/yii2-maskedinput: JQuery的插件
如果你的项目中需要一个,可以添加相应包到你的composer.json中,所以为了得到完全和2.0一直的2.1版本,composer的配置要如下
"require": {
"yiisoft/yii2": "2.1.x-dev",
"yiisoft/yii2-jquery": "1.0.x-dev",
"yiisoft/yii2-captcha": "1.0.x-dev",
"yiisoft/yii2-rest": "1.0.x-dev",
"yiisoft/yii2-mssql": "1.0.x-dev",
"yiisoft/yii2-oracle": "1.0.x-dev",
"yiisoft/yii2-maskedinput": "1.0.x-dev"
}
大部分官方扩展也都有对应的2.1版本的分支
"require": {
"yiisoft/yii2": "2.1.x-dev",
...
"yiisoft/yii2-debug": "2.1.x-dev",
"yiisoft/yii2-gii": "2.1.x-dev",
"yiisoft/yii2-swiftmailer": "2.2.x-dev",
"yiisoft/yii2-bootstrap": "2.2.x-dev",
"yiisoft/yii2-jui": "2.1.x-dev",
"yiisoft/yii2-httpclient": "2.1.x-dev",
"yiisoft/yii2-authclient": "2.2.x-dev",
"yiisoft/yii2-mongodb": "2.2.x-dev",
"yiisoft/yii2-sphinx": "2.2.x-dev",
"yiisoft/yii2-imagine": "2.2.x-dev",
"yiisoft/yii2-faker": "2.1.x-dev"
}
基础代码升级
确保你的代码不适用任何不推荐的规范
- className(),获取类名之前是SomeClass::className(),它应该用原生的::class语法替代。
- 抛出或捕获yii\base\InvalidParamException, 它应该被yii\base\InvalidArgumentException取代。
- yii\console\Controller常量的用法,例如 EXIT_CODE_NORMAL或EXIT_CODE_ERROR,用于退出代码。 它们应该由通过yii\console\ExitCode类提供的常量来替换。
重点
对于类名称规范,任何DI对象配置都应该使用'__class'关键字而不是'class'。 这会影响DI容器,Yii::createObject()以及任何应用程序组件规范。 所以以前的Yii应用程序配置如下:
return [
'components' = [
'mailer' => [
'class' => yii\swiftmailer\Mailer::class,
],
'mutex' => [
'class' => yii\mutex\FileMutex::class
],
'db' => [
'class' => yii\db\Connection::class,
'dsn' => 'mysql:host=localhost;dbname=myproject',
'username' => '???',
'password' => '???',
],
]
];
现在应该是
return [
'components' = [
'mailer' => [
'__class' => yii\swiftmailer\Mailer::class,
],
'mutex' => [
__class' => yii\mutex\FileMutex::class
],
'db' => [
'__class' => yii\db\Connection::class,
'dsn' => 'mysql:host=localhost;dbname=myproject',
'username' => '???',
'password' => '???',
],
// ...
],
// ...
];
日志Logging
2.1版的日志记录已根据PSR-3进行了重新编写,特别是您可以使用Monolog作为您的项目的记录器。应用程序组件'日志'不再存在。 您应该通过Yii::setLogger()或者使用Application::setLogger()来直接配置记录器,例如'logger'键在应用程序配置中。
所以之前yii2配置如下
return [
'bootstrap' => [
'log', // should be removed for 2.1
],
'components' = [
// should be converted to 'logger' for 2.1
'log' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'class' => yii\log\FileTarget::class,
'levels' => ['error', 'warning'],
],
],
],
// ...
],
// ...
];
现在要如下进行
return [
// no bootstrap
'logger' => [
'traceLevel' => YII_DEBUG ? 3 : 0,
'targets' => [
[
'__class' => yii\log\FileTarget::class,
'levels' => ['error', 'warning'],
],
],
],
'components' = [
// no 'log' component
// ...
],
// ...
];
缓存Caching
在2.1缓存已根据PSR-16重写,这允许您轻松使用第三方缓存提供程序。 为了保持“缓存依赖”特性,缓存规范已被更改。 现在任何缓存组件都应该使用yii\caching\Cache类(或实现yii\caching\CacheInterface),而实际的缓存存储则通过Cache::$handler处理程序来确定。
所以之前版本代码如下设置
return [
'components' = [
'cache' => [
'class' => yii\caching\DbCache::class,
'cacheTable' => 'my_cache',
],
// ...
],
// ...
];
现在我们需要这样
return [
'components' = [
'cache' => [
'__class' => yii\caching\Cache::class,
'handler' => [
'__class' => yii\caching\DbCache::class,
'cacheTable' => 'my_cache',
],
],
// ...
],
// ...
];
请注意:可能发生的情况是,如果缓存配置不正确(例如使用旧配置),您将不会收到即时错误,但只是一些潜在的错误行为。
JQuery正如已经说过的,所有与JQuery相关的代码已经被移动到“yiisoft/yii2-jquery”包中。 这尤其包括yii.js,ActiveForm的客户端验证和GridView的过滤器处理程序。 没有额外的调整,ActiveForm或GridView小部件的简单使用将不再提供任何JavaScript代码注册,因此不会出现'花哨的'客户端效应。 您需要将“clientScript”行为附加到小部件,以使其行为像以前一样。
这点我喜欢
比如下面的代码
<?php $form = ActiveForm::begin([
'id' => 'login-form',
'as clientScript' => yii\jquery\ActiveFormClientScript::class, // attach JQuery client script, enabling client-side validation:
]); ?>
...
<?php ActiveForm::end(); ?>
<?= GridView::widget([
'as clientScript' => yii\jquery\GridViewClientScript::class, // attach JQuery client script, enabling filter auto-submit
'dataProvider' => $dataProvider,
// ...
]); ?>
一个例子
上面我们说了yii2.1在库方面的一些改动和新增特性,为了更清楚地了解Yii 2.1的使用情况,您可以参考工作项目模板,该模板已经更新至2.1 - ii2tech/project-template
通过Composer安装composer create-project --prefer-dist --stability=dev yii2tech/project-template yii-test 2.0.x-dev
用git安装
# clone repo:
git clone git@github.com:yii2tech/project-template.git yii-test
# go to project:
cd yii-test
# get 2.0 branch:
git fetch
git checkout 2.0
配置并初始化
下载后还需要进行初始化工作
cd yii-test
php install.php
小结
这是阿北第一次借助于google翻译e文,难免有不准确的地方请大家多多见谅,对于一名钟爱yii的开发者,我自然特期望yii2.1版本的来临,也想尝试那些有趣的特性,yii team,加油。