如何解决覆盖Yii2类
假设yii2-app处于高级状态。我想覆盖\yii\helpers\Inflector::hasIntl()
(间接)使用的yii\web\Response
的基本实现。
原始代码
protected static function hasIntl()
{
return extension_loaded('intl');
}
我想要的代码
<?php
namespace backend\components;
class Inflector extends \yii\helpers\Inflector
{
protected static function hasIntl()
{
return false;
}
}
因此,我创建了backend\components\Inflector
并扩展了yii\helpers\Inflector
并覆盖了上面显示的方法。
然后在backend/config/bootstrap.php
中添加:
Yii::$container->set('\yii\helpers\Inflector','\backend\components\Inflector');
但未使用自定义实现。它一直使用原始版本。所以,问题:
- 为什么不工作? 一个好的替代解决方案? (一个丑陋的人)
我之前已经阅读过Yii2 extend or replace core class并使用过此Yii::$container->set
方法,但即使执行以下操作,在这种情况下也无法正常工作
Yii::$container->set('\yii\helpers\Inflector',[
'class' => '\backend\components\Inflector',]);
解决方法
官方documentation确认了这种方法,但是类映射看起来有些不同:
Yii::$classMap['yii\helpers\Inflector'] = '@app/components/Inflector.php';
,
我认为这不是一个优雅的解决方案
我能够使用以下方法解决它:
Yii::$classMap['yii\helpers\Inflector'] = '@path/to/new/file'
但是,这看起来不像其他解决方案那样优雅,就像替换文件一样。在这种情况下,新文件必须具有原始名称空间yii\helpers\Inflector
并扩展yii\helpers\BaseInflector
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。