我是阿北,Yii学习社群正在搞技术文竞赛(获胜者送VIP权限),邀请你参加。 另外我的订阅号送书中,看详情
阿北
阿北 发布于 3个月前

好消息:你可以提前拿到Yii2.1了

原文地址如下 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,加油。

1-2条,共2条数据.
꧁꫞꯭꯭小꯭核꯭桃꯭他꯭爹꯭꫞꧂
3个月前
# 543

加油^0^~


+0

🙂

sockball
2个月前
# 614

className 和 InvalidParamException的升级, 好像在phpstorm已经有体现了, 直接画上删除线... Jquery那个是不是就是说 把JS部分从原来的基础上分离出来 需要使用的时候附加就行了..


+0

对的,className应该是和php本身冲突了,所以phpstorm才提示,关于jquery你理解的没错,之前yii2对于前台的js集成太对了。

-
在线