查看: 2245|回复: 0

[PHP代码] 好消息:你可以提前拿到Yii2.1了

发表于 2018-3-12 08:00:03

原文地址如下 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"

  1. {
  2. "require": {
  3. "yiisoft/yii2": "2.1.x-dev"
  4. }
  5. }
复制代码

然后在所在目录执行 composer install就好了

  1. macdeMacBook-Pro:2.1.x-dev mac$ composer install
  2. Loading composer repositories with package information
  3. Updating dependencies (including require-dev)
  4. Package operations: 6 installs, 0 updates, 0 removals
  5. - Installing yiisoft/yii2-composer (2.0.5): Loading from cache
  6. - Installing cebe/markdown (1.1.2): Loading from cache
  7. - Installing psr/http-message (1.0.1): Loading from cache
  8. - Installing psr/simple-cache (1.0.0): Downloading (100%)
  9. - Installing psr/log (1.0.2): Loading from cache
  10. - Installing yiisoft/yii2 (2.1.x-dev 422be4c): Cloning 422be4cd6d
  11. 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()'))
  12. Writing lock file
  13. Generating autoload files
复制代码

看到 yiisoft/yii2 (2.1.x-dev 422be4c)了吧。

注意:yii2.1放弃了自己的PHP类自动加载器而使用Composer提供的自动加载器,因此,你需要在composer.json中配置自动加载项,否则PHP没有办法找到我们我们项目中声明的类。

比如

  1. {
  2. "autoload": {
  3. "psr-4": {"app\\": ""}
  4. },
  5. "autoload-dev": {
  6. "psr-4": {"tests\\": "tests"}
  7. },
  8. ...
  9. }
复制代码

如果项目文件的自动加载缺失,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的配置要如下

  1. "require": {
  2. "yiisoft/yii2": "2.1.x-dev",
  3. "yiisoft/yii2-jquery": "1.0.x-dev",
  4. "yiisoft/yii2-captcha": "1.0.x-dev",
  5. "yiisoft/yii2-rest": "1.0.x-dev",
  6. "yiisoft/yii2-mssql": "1.0.x-dev",
  7. "yiisoft/yii2-oracle": "1.0.x-dev",
  8. "yiisoft/yii2-maskedinput": "1.0.x-dev"
  9. }
复制代码

大部分官方扩展也都有对应的2.1版本的分支

  1. "require": {
  2. "yiisoft/yii2": "2.1.x-dev",
  3. ...
  4. "yiisoft/yii2-debug": "2.1.x-dev",
  5. "yiisoft/yii2-gii": "2.1.x-dev",
  6. "yiisoft/yii2-swiftmailer": "2.2.x-dev",
  7. "yiisoft/yii2-bootstrap": "2.2.x-dev",
  8. "yiisoft/yii2-jui": "2.1.x-dev",
  9. "yiisoft/yii2-httpclient": "2.1.x-dev",
  10. "yiisoft/yii2-authclient": "2.2.x-dev",
  11. "yiisoft/yii2-mongodb": "2.2.x-dev",
  12. "yiisoft/yii2-sphinx": "2.2.x-dev",
  13. "yiisoft/yii2-imagine": "2.2.x-dev",
  14. "yiisoft/yii2-faker": "2.1.x-dev"
  15. }
复制代码
基础代码升级

确保你的代码不适用任何不推荐的规范

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应用程序配置如下:

  1. return [
  2. 'components' = [
  3. 'mailer' => [
  4. 'class' => yii\swiftmailer\Mailer::class,
  5. ],
  6. 'mutex' => [
  7. 'class' => yii\mutex\FileMutex::class
  8. ],
  9. 'db' => [
  10. 'class' => yii\db\Connection::class,
  11. 'dsn' => 'mysql:host=localhost;dbname=myproject',
  12. 'username' => '???',
  13. 'password' => '???',
  14. ],
  15. ]
  16. ];
复制代码

现在应该是

  1. return [
  2. 'components' = [
  3. 'mailer' => [
  4. '__class' => yii\swiftmailer\Mailer::class,
  5. ],
  6. 'mutex' => [
  7. __class' => yii\mutex\FileMutex::class
  8. ],
  9. 'db' => [
  10. '__class' => yii\db\Connection::class,
  11. 'dsn' => 'mysql:host=localhost;dbname=myproject',
  12. 'username' => '???',
  13. 'password' => '???',
  14. ],
  15. // ...
  16. ],
  17. // ...
  18. ];
复制代码
日志Logging

2.1版的日志记录已根据PSR-3进行了重新编写,特别是您可以使用Monolog作为您的项目的记录器。应用程序组件'日志'不再存在。 您应该通过Yii::setLogger()或者使用Application::setLogger()来直接配置记录器,例如'logger'键在应用程序配置中。

所以之前yii2配置如下

  1. return [
  2. 'bootstrap' => [
  3. 'log', // should be removed for 2.1
  4. ],
  5. 'components' = [
  6. // should be converted to 'logger' for 2.1
  7. 'log' => [
  8. 'traceLevel' => YII_DEBUG ? 3 : 0,
  9. 'targets' => [
  10. [
  11. 'class' => yii\log\FileTarget::class,
  12. 'levels' => ['error', 'warning'],
  13. ],
  14. ],
  15. ],
  16. // ...
  17. ],
  18. // ...
  19. ];
复制代码

现在要如下进行

  1. return [
  2. // no bootstrap
  3. 'logger' => [
  4. 'traceLevel' => YII_DEBUG ? 3 : 0,
  5. 'targets' => [
  6. [
  7. '__class' => yii\log\FileTarget::class,
  8. 'levels' => ['error', 'warning'],
  9. ],
  10. ],
  11. ],
  12. 'components' = [
  13. // no 'log' component
  14. // ...
  15. ],
  16. // ...
  17. ];
复制代码
缓存Caching

在2.1缓存已根据PSR-16重写,这允许您轻松使用第三方缓存提供程序。 为了保持“缓存依赖”特性,缓存规范已被更改。 现在任何缓存组件都应该使用yii\caching\Cache类(或实现yii\caching\CacheInterface),而实际的缓存存储则通过Cache::$handler处理程序来确定。

所以之前版本代码如下设置

  1. return [
  2. 'components' = [
  3. 'cache' => [
  4. 'class' => yii\caching\DbCache::class,
  5. 'cacheTable' => 'my_cache',
  6. ],
  7. // ...
  8. ],
  9. // ...
  10. ];
复制代码

现在我们需要这样

  1. return [
  2. 'components' = [
  3. 'cache' => [
  4. '__class' => yii\caching\Cache::class,
  5. 'handler' => [
  6. '__class' => yii\caching\DbCache::class,
  7. 'cacheTable' => 'my_cache',
  8. ],
  9. ],
  10. // ...
  11. ],
  12. // ...
  13. ];
复制代码

请注意:可能发生的情况是,如果缓存配置不正确(例如使用旧配置),您将不会收到即时错误,但只是一些潜在的错误行为。

JQuery

正如已经说过的,所有与JQuery相关的代码已经被移动到“yiisoft/yii2-jquery”包中。 这尤其包括yii.js,ActiveForm的客户端验证和GridView的过滤器处理程序。 没有额外的调整,ActiveForm或GridView小部件的简单使用将不再提供任何JavaScript代码注册,因此不会出现'花哨的'客户端效应。 您需要将“clientScript”行为附加到小部件,以使其行为像以前一样。

这点我喜欢

比如下面的代码

  1. <?php $form = ActiveForm::begin([
  2. 'id' => 'login-form',
  3. 'as clientScript' => yii\jquery\ActiveFormClientScript::class, // attach JQuery client script, enabling client-side validation:
  4. ]); ?>
  5. ...
  6. <?php ActiveForm::end(); ?>
复制代码
  1. <?= GridView::widget([
  2. 'as clientScript' => yii\jquery\GridViewClientScript::class, // attach JQuery client script, enabling filter auto-submit
  3. 'dataProvider' => $dataProvider,
  4. // ...
  5. ]); ?>
复制代码
一个例子

上面我们说了yii2.1在库方面的一些改动和新增特性,为了更清楚地了解Yii 2.1的使用情况,您可以参考工作项目模板,该模板已经更新至2.1 - ii2tech/project-template

通过Composer安装
  1. composer create-project --prefer-dist --stability=dev yii2tech/project-template yii-test 2.0.x-dev
复制代码
用git安装
  1. # clone repo:
  2. git clone git@github.com:yii2tech/project-template.git yii-test
  3. # go to project:
  4. cd yii-test
  5. # get 2.0 branch:
  6. git fetch
  7. git checkout 2.0
复制代码
配置并初始化

下载后还需要进行初始化工作

  1. cd yii-test
  2. php install.php
复制代码
小结

这是阿北第一次借助于google翻译e文,难免有不准确的地方请大家多多见谅,对于一名钟爱yii的开发者,我自然特期望yii2.1版本的来临,也想尝试那些有趣的特性,yii team,加油。

原文链接 http://nai8.me/forum/detail.html?id=50



回复

使用道具 举报