簡體   English   中英

覆蓋 Yii2 類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM