[英]Override Yii2 Class
假設 yii2-app-advanced。 我想覆蓋由yii\\web\\Response
(間接)使用的\\yii\\helpers\\Inflector::hasIntl()
的基本實現。
原始代碼
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
擴展backend\\components\\Inflector
yii\\helpers\\Inflector
並覆蓋了如上所示的方法。
然后在backend/config/bootstrap.php
我添加:
Yii::$container->set('\yii\helpers\Inflector', '\backend\components\Inflector');
但是沒有使用自定義實現。 它一直使用原始的。 所以,問題:
我之前讀過Yii2 擴展或替換核心類並使用過這個Yii::$container->set
方法,但在這種情況下不起作用,即使這樣做:
Yii::$container->set('\yii\helpers\Inflector', [
'class' => '\backend\components\Inflector',
]);
官方文檔證實了這種方法,但類映射看起來有點不同:
Yii::$classMap['yii\helpers\Inflector'] = '@app/components/Inflector.php';
我不認為這是一個優雅的解決方案
我能夠通過使用來解決它:
Yii::$classMap['yii\helpers\Inflector'] = '@path/to/new/file'
但這看起來不像其他解決方案那么優雅,就像替換文件一樣。 在這種情況下,新文件必須具有原始命名空間yii\\helpers\\Inflector
並擴展yii\\helpers\\Inflector
yii\\helpers\\BaseInflector
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.