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/)