这个重写解决了Yii2遭受的许多问题,比如框架与jQuery,bower,bootstrap相结合。[TODO:添加更多关于Yii2的grieff]
以下是Yii3中的主要更改。您可以查看完整的CHANGELOG以获取详尽的列表。
框架源代码已被拆分为多个包,并且在其核心级别,Yii不再对您的开发堆栈或您将使用的功能进行假设。
这使您可以选择组成应用程序所需的软件包。
这种重组也是维护的好消息,因为这些包将单独发布,从而允许更频繁的更新。
已删除自定义PHP类自动加载器,以支持Composer的PSR-4实现。这意味着为了让Yii看到你的类,你必须在composer.json中显式注册你的命名空间。我们稍后会看到一个例子。
现在,日志记录符合PSR-3
缓存现在符合PSR-16
依赖注入现在符合PSR-11
如果您曾经使用Yii2安装了扩展程序,您可能/当然已经找到了自己的扩展README文件,在您自己的config/main.php文件中查找要复制/粘贴的配置块。
这通常会导致:
一个巨大的配置文件(您可能决定将其拆分为较小的文件)当使用新的/更改的配置选项重新发布新版本的扩展时,将更新非平凡配置。
Yii3采用了另一种方法。每个软件包捆绑自己的配置,可能会开箱即用。如果需要,您可以从配置文件中覆盖它们。
composerdu)时负责扫描和合并所有配置。
软件包作者将有责任通过严格的版本化版本来避免引入BC中断。
...
以下是Yii3中引入的新软件包,可在此官方列表中找到。
我们简要介绍一下:
这是Yii的新内核。它定义了基本框架及其核心功能,如行为,i18n,邮件,验证...
您很少想直接安装yiisoft/yii-core。相反,您将安装以下一项或多项:
这三个包被视为扩展,负责实现它们所指的每个“通道”的基本功能:
yii-web实现了构建Web应用程序所需的一切(资产管理,会话,请求处理..)
yii-rest实现了构建REST接口所需的一切(ActiveController,..)
库
在Yii3中,库不依赖于Yii,并且可以在框架之外使用。他们的包名是yiisoft/没有yii-prefix的东西。
DB的各种驱动程序也已分为包:
让我们尝试使用Yii3和提供的项目模板运行Web应用程序。
composercreate-project--prefer-dist--stability=devyiisoft/yii-project-templatemyappcdmyapp这是创建的结构:
.├──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/yiiserve立即启动Web服务器,因为它会抱怨不知道“app”类。实际上,此项目模板仅在您的应用程序中引入最低限度:缓存,依赖项注入和日志记录。模板不会对您正在构建的应用程序类型(web,cli,api)做出假设。
由于我们正在进行Web应用程序,因此我们需要一个资产管理器。我们可以选择其中一个:让我们选择Foxy(个人品味,因为composer来自Tunisia的速度很慢):
.├──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