本帖已被加为精华贴

解读 Yii3

博客 · 本文由 · ITer · 发布于 8月前 · 8359 阅读

介绍

本文档适用于已熟悉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 实现了构建控制台应用程序所需的一切(命令的基本控制器,命令助手,...)
  • yii-web 实现了构建Web应用程序所需的一切(资产管理,会话,请求处理..)
  • yii-rest 实现了构建REST接口所需的一切(ActiveController,..)

在Yii 3中,库不依赖于Yii,并且可以在框架之外使用。 他们的包名是 yiisoft/ 没有yii-prefix的东西。

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应用程序,因此我们需要一个资产管理器。 我们可以选择其中一个:

  • Asset-packagist和composer-merge-plugin(仅需要PHP)
  • Foxy (要求 npm 或 yarn)

让我们选择Foxy(个人品味,因为composer 来自 Tunisia 的速度很慢):

composer require "foxy/foxy:^1.0.0"

我们现在可以安装 yii-base-web 启动器并运行我们的应用程序:

composer require yiisoft/yii-base-web

vendor/bin/yii serve

通过访问 http://localhost:8080/ 您现在应该看到如下内容:

yii3.0 解读

检查我们的项目结构,除了创建这三个条目之外,没有什么真正改变:

  • node_modules/
  • package-lock.json
  • package.json

那么我们在浏览器中看到的内容来自哪里?

探索 yiisoft/yii-base-web结构: 如果您浏览vendor/yiisoft/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

如果您已经使用Yii2和基本模板开发了应用程序,那么文件夹和文件应该对您有意义。

评论数量:6

那天抽点时间再试下。

8月前 回复

Reading D:\work\yii3\myapp/vendor/composer/installed.json

Writing lock file

Generating autoload files

Assembling config files

  • yiisoft/yii-project-template 3.0.x-dev [common,params]

下载成功去试试,嘿嘿

8月前 回复

@ITer

composer require yiisoft/yii-base-web

这行报错。

Could not find a version of package yiisoft/yii-base-web matching your mini

mum-stability (stable). Require it with an explicit version constraint allo

wing its desired stability.

8月前 回复

成功安装 只是界面不太一样。

上面的那个错是路径问题。

8月前 回复

@kittyfamous 厉害的

8月前 回复

试了下,似乎还不能开发使用。

过些日子再研究了,先拿yii2折腾了。

又要借鉴酱油哥样式了。

6月前 回复