hiqsol / core
Yii 3.0 建议方案 :: 不用于实际使用
dev-master
2018-07-20 14:36 UTC
Requires
Requires (Dev)
- hiqdev/hidev-php: <2.0 || dev-master
- hiqsol/hidev-hiqsol: <2.0 || dev-master
- yiisoft/di: *@dev
Replaces
- yiisoft/yii2: *
This package is auto-updated.
Last update: 2024-09-18 07:43:16 UTC
README
此包是 Yii 3.0 架构变更建议。
不打算用于实际使用
想法
- 框架被分割成部分,不是彻底的,而是功能性的
yiisoft/core- 所有之前框架但现在之后的所有内容yiisoft/di- 如此,修复了一些错误yiisfot/yii-web- 来自web和filter文件夹的所有内容,可以在没有 yiisoft/console 的情况下使用,但需要 coreyiisfot/yii-console- 来自console文件夹的所有内容,可以在没有 yiisoft/web 的情况下使用,但需要 coreyiisoft/log- 来自log文件夹的所有内容,任何 PSR 兼容的缓存都可以使用,可以做到框架无关yiisoft/cache- 来自caching文件夹的所有内容,任何 PSR 兼容的缓存都可以使用,可以做到框架无关yiisoft/db- 不是所有应用都需要它,可以做到框架无关yiisoft/rbac- 不是所有应用都需要它,可以做到框架无关- 还应考虑
- 网格
- 小部件
- 分割数据库和 ActiveRecord
- 请参阅讨论 #1
- 除了
composer.json文件中的版本约束外,任何地方都不提及框架版本- 重命名以
yii-为前缀的 yii 扩展 - 经验法则
- 如果扩展需要直接或通过依赖关系使用
yiisoft/core- 则使用yii-前缀 - 如果扩展可以在没有 yii 的情况下使用(完全或部分)- 则不带
yii-前缀命名 - 如果扩展在提供更多功能时使用 yii - 则建议使用 yii
- 如果扩展需要直接或通过依赖关系使用
- 重命名以
yiisfot/core只需要虚拟 psr 实现,而不是具体的 yii 包- 实际上,现在并非所有 psr 实现都能正常工作,但这是一种意向声明,迟早会实现
- 每个部分都在
config文件夹中提供自己的配置,请参阅下面的示例- 总结配置是通过 composer-config-plugin 组装的,我们可以考虑其他配置组装工具,但这个已经经过测试,并且没有其他工具 :)
- 我理解这是一个最有争议的问题,但它可能成为主框架功能
- 允许丢弃 coreComponents 和其他诸如合并框架代码中可用的配置部分之类的辅助工具
- 配置成为 DI 容器的配置,包含应用程序和所有服务的配置(之前它是应用程序的配置)
- 允许创建洋葱式应用程序和插件,请参阅 我的文章
- 请参阅讨论 #2
yii2-composer- 不再需要- yii2-extension composer 包类型不再需要,扩展将成为
library - 此外,yii2-composer 组装
extensions.php,用于别名,而 composer-config-plugin 做了同样的事情,但更有效
- yii2-extension composer 包类型不再需要,扩展将成为
- 考虑完全删除引导功能
- 它主要用于将扩展合并到应用程序配置中 - 应使用 composer-config-plugin 来做这件事
- 应配置所有其他情况的事件触发
- 这通过仅在特定情况下运行任务来提高性能,而不是在每次请求时都运行
- DI
- 完全移除
ServiceLocator,使用 DI 代替 - 完全从
Application和Module中移除组件支持- 根据我的经验,依赖注入(DI)已经足够
Application变得非常简洁
- 完全移除
- 完全移除
Configurable和Yii::configure(),以及与之相关的init()- 移除所有地方的
$config(最后一个构造函数参数) Configurable是这样工作的$config数组被传递给构造函数$config通过Yii::configure()应用- 构造函数执行
init() - 由于以下原因,它不与新DI兼容
- 新的DI首先调用构造函数,然后设置属性
- 从构造函数中无法调用init
- 理论上,可以使用DI调用init,但必须确保它在设置所有属性之后调用
- 必须修复所有具有
init()的类 - 这是一个严重的BC-break,但一切都会变得简单
- 不需要修改
yiisoft/di - 初始化最好用getter替代,使其延迟,从理论上讲更高效
- 不需要修改
- 移除所有地方的
- 将
Yii重做为一个干净的辅助工具,没有全局静态属性- 不需要在入口脚本中引入Yii
- 将所有其他助手移动到
yii\helpers\Yii - 移除“全局变量”
Yii::$app、Yii::$logger等 - 将别名移动到
Application - 仅保留:
Yii::t()、Yii::createObject()以及日志和性能分析函数 - 为了使它们工作,必须在入口脚本中调用
Yii::setContainer($container) - 如果未定义容器,则所有函数将以默认方式操作,例如使用PHP内置功能进行日志记录
- 我认为应该从版本中弃用
Yii::createObject(),首先在框架中移除其使用,然后在下一个版本中完全移除,以Factory::create()代替 - 将许多定义移动到
config/defines.php,composer-config-plugin也会组装定义
- 清理
- 将文件夹
web重命名为public - 将别名
@webroot重命名为@public - 我希望在重载的文件夹(base、web)中减少文件数量,增加一些文件夹,但不要增加文件夹深度
- 将所有异常移动到base和web中的自己的文件夹
- 将web格式化器移动到自己的文件夹
- 考虑:url、action
- 将文件夹
入口脚本
<?php use hiqdev\composer\config\Builder; use yii\di\Container; use yii\helpers\Yii; (function () { require_once __DIR__ . '/../vendor/autoload.php'; require_once Builder::path('defines'); $container = new Container(require Builder::path('web')); Yii::setContainer($container); $container->get('app')->run(); })();
配置示例
来自yiisoft/core的示例,src/config/common.php
<?php return [ yii\base\Application::class => Reference::to('app'), 'app' => [ 'aliases' => [ '@root' => dirname(__DIR__, 5), '@vendor' => dirname(__DIR__, 4), ], 'params' => $params, ], yii\base\Request::class => Reference::to('request'), yii\base\View::class => Reference::to('view'), ];
来自yiisoft/web的示例,src/config/web.php
<?php return [ 'app' => [ '__class' => yii\web\Application::class, 'id' => 'web', 'name' => 'web', ], 'request' => [ '__class' => yii\web\Request::class, ], 'view' => [ '__class' => yii\web\View::class, ], ];
来自yiisoft/console的示例,src/config/console.php
<?php return [ 'app' => [ '__class' => yii\console\Application::class, 'id' => 'console', 'name' => 'console', ], 'request' => [ '__class' => yii\console\Request::class, ], 'view' => [ '__class' => yii\console\View::class, ], ];
来自yiisoft/log的示例,src/config/common.php
<?php return [ 'logger' => [ '__class' => yii\log\Logger::class, ], Psr\Log\LoggerInterface::class => yii\di\Reference::to('logger'), ];
部分和文件夹
许可证
本项目根据BSD-3-Clause许可证发布许可协议。更多信息请参阅此处。
版权所有 © 2018,sol (http://hiqdev.com/)