介绍
本文档适用于已熟悉Yii2的读者。 这意味着将所有与Yii 3相关的信息集中在一个地方,以便更容易走上正轨。
Yii 3是Yii框架的第二次重写。
最初从2.1分支开始,后来因为所有向后兼容性破坏而决定切换到3.X系列。 从3.0开始,Yii将遵循Sementic Versionning。
这个重写解决了Yii 2遭受的许多问题,比如框架与jQuery,bower,bootstrap相结合。 [TODO:添加更多关于Yii2的grieff]
变更概述
以下是Yii 3中的主要更改。您可以查看完整的CHANGELOG以获取详尽的列表。
源代码分裂
框架源代码已被拆分为多个包,并且在其核心级别,Yii不再对您的开发堆栈或您将使用的功能进行假设。
这使您可以选择组成应用程序所需的软件包。
这种重组也是维护的好消息,因为这些包将单独发布,从而允许更频繁的更新。
自动加载
已删除自定义PHP类自动加载器,以支持 Composer 的 PSR-4 实现。 这意味着为了让Yii看到你的类,你必须在 composer.json 中显式注册你的命名空间。 我们稍后会看到一个例子。
PSR兼容性
通过实现以下PSR,Yii 3在 PHP-FIG 建议之后采取了一些积极的步骤:
现在,日志记录符合PSR-3
缓存现在符合PSR-16
依赖注入现在符合PSR-11
应用配置
如果您曾经使用Yii 2安装了扩展程序,您可能/当然已经找到了自己的扩展 README 文件,在您自己的config/ main.php
文件中查找要复制/粘贴的配置块。
这通常会导致:
一个巨大的配置文件(您可能决定将其拆分为较小的文件) 当使用新的/更改的配置选项重新发布新版本的扩展时,将更新非平凡配置。
Yii3 采用了另一种方法。 每个软件包捆绑自己的配置,可能会开箱即用。 如果需要,您可以从配置文件中覆盖它们。
这一切都是通过利用 hiqdev/composer-config-plugin composer插件完成的,该插件在您运行 composer dump-autoload(也称为
composer du
)时负责扫描和合并所有配置。
您可以阅读 Yii2 projects alternative organization,以深入解释 hiqdev/composer-config-plugin 背后的动机。
软件包作者将有责任通过严格的版本化版本来避免引入BC中断。
依赖注入
...
Yii3 composer 包
以下是Yii 3中引入的新软件包,可在此官方列表中找到。
我们简要介绍一下:
框架
这是Yii的新内核。 它定义了基本框架及其核心功能,如行为,i18n,邮件,验证...
您很少想直接安装 yiisoft/yii-core
。 相反,您将安装以下一项或多项:
这三个包被视为扩展,负责实现它们所指的每个“通道”的基本功能:
yii-console">https://github.com/yiisoft/yii-rest">yiisoft/yii-r... 实现了构建控制台应用程序所需的一切(命令的基本控制器,命令助手,...)
yii-web
实现了构建Web应用程序所需的一切(资产管理,会话,请求处理..)</li><li><code>yii-rest 实现了构建REST接口所需的一切(ActiveController,..)</li><h3>库</h3><p>在Yii 3中,库不依赖于Yii,并且可以在框架之外使用。 他们的包名是 <code>yiisoft/ 没有yii-prefix的东西。yiisoft/db">https://github.com/yiisoft/db">yiisoft/db:数据库库... 的驱动程序
DB的各种驱动程序也已分为包:
扩展
扩展取决于(至少)yii-core。 除了上面已经遇到的3个扩展(yii-console,yii-web,yii-api),这些包都可用开发环境扩展页面渲染扩展数据渲染JS&CSS框架集成小部件杂项Yii项目模板和基础应用程序yiisoft/yii-project-template这是一个非常基本的Yii项目模板,您可以使用它来开始开发。您可能希望选择这三个启动器中的一个或多个以在下一个项目中安装:让我们尝试在下一节中运行Web基础模板。
运行您的第一个 Yii3 驱动的应用程序
让我们尝试使用 Yii3 和提供的项目模板运行Web应用程序。
安装项目模板
composer create-project --prefer-dist --stability=dev yiisoft/yii-project-template myapp cd myapp
这是创建的结构:
. ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── config │ ├── common.php │ └── params.php ├── docker-compose.yml ├── hidev.yml ├── public │ ├── assets │ ├── favicon.ico │ ├── index.php │ └── robots.txt ├── runtime └── vendor
您将无法使用
./vendor/bin/yii serve
立即启动Web服务器,因为它会抱怨不知道“app”类。实际上,此项目模板仅在您的应用程序中引入最低限度:缓存,依赖项注入和日志记录。 模板不会对您正在构建的应用程序类型(web,cli,api)做出假设。你可以从头开始使用这个裸模板,选择你想要使用的扩展和包并开始开发,或者你可以选择提供的三个启动器中的一个。
安装Web启动器
由于我们正在进行Web应用程序,因此我们需要一个资产管理器。 我们可以选择其中一个:让我们选择Foxy(个人品味,因为composer 来自 Tunisia 的速度很慢):
composer require "foxy/foxy:^1.0.0"
我们现在可以安装
yii-base-web
. ├── LICENSE.md ├── README.md ├── composer.json ├── config │ ├── common.php │ ├── console.php │ ├── env.php │ ├── messages.php │ ├── params.php │ └── web.php ├── phpunit.xml.dist ├── public │ └── css │ └── site.css ├── requirements.php ├── runtime └── src ├── assets │ └── AppAsset.php ├── commands │ └── HelloController.php ├── controllers │ └── SiteController.php ├── forms │ ├── ContactForm.php │ └── LoginForm.php ├── mail │ └── layouts ├── messages │ ├── et │ ├── pt-BR │ ├── ru │ └── uk ├── models │ └── User.php ├── views │ ├── layouts │ └── site └── widgets └── Alert.php
Asset-packagist和composer-merge-plugin(仅需要PHP)
Foxy (要求 npm 或 yarn)
yiisoft/yii-swiftmailer Swift Mailer Extension
yiisoft/yii-http-client HTTP客户端扩展
yiisoft/yii-auth-client 外部身份验证扩展
yiisoft/yii-captcha CAPTCHA扩展
yiisoft/yii-masked-input:屏蔽输入小部件(取决于jquery)
yiisoft/yii-bootstrap3:Bootstrap3 资源和小部件
yiisoft/yii-bootstrap4:Bootstrap4 资源和小部件
yiisoft/yii-jquery jQuery,ActiveForm
yiisoft/yii-dataview:ListView,GridView,DetailView
yiisoft/yii-twig Twig Extension
yiisoft/yii-debug 调试面板
yiisoft/yii-gii 代码生成器扩展
yiisoft/yii-dev 用于框架贡献者的工具
yiisoft/db-mysql MySQL支持Yii
yiisoft/db-mssql 对Yii的MSSQL支持
yiisoft/db-pgsql PostgreSQL支持Yii
yiisoft/db-sqlite 对Yii的SQLite支持
yiisoft/db-oracle Oracle 数据库支持
yiisoft/db-sphinx Sphinx支持
yiisoft/db-redis Redis支持
yiisoft/db-mongodb MongoDB支持
yiisoft/db-elasticsearch Elatic 支持
https://github.com/yiisoft/log">yiisoft/log:日志... href="yiisoft/di:依赖注入库
https://github.com/yiisoft/rbac">yiisoft/rbac:... href="yiisoft/view:视图渲染库