没有不值得去解决的问题,也没有不值得去学习的技术!

Error in Yii2: Typed property common\components\i18n\PhpMessageSource::$fallbackBasePath must not be accessed before initialization

在 Yii2 中报错:Typed property common\\components\\i18n\\PhpMessageSource::$fallbackBasePath must not be accessed before initialization'

1. In Yii2, an error occurs: Typed property common\\components\\i18n\\PhpMessageSource::$fallbackBasePath must not be accessed before initialization’. As shown in Figure 1

In Yii2, an error occurs: Typed property common\\components\\i18n\\PhpMessageSource::$fallbackBasePath must not be accessed before initialization'
Figure 1

2. Provide a default value for $fallbackBasePath. Before modification: public ?string $fallbackBasePath; After modification: public ?string $fallbackBasePath = null;

PHP
<?php
 
namespace common\components\i18n;
 
class PhpMessageSource extends \yii\i18n\PhpMessageSource
{
    public ?string $fallbackBasePath = null;
 
    protected function loadMessages($category, $language)
    {
        $messages = parent::loadMessages($category, $language);
 
        if (empty($messages) && $this->fallbackBasePath !== null) {
            $fallback = new PhpMessageSource([
                'basePath' => $this->fallbackBasePath,
                'forceTranslation' => $this->forceTranslation,
                'fileMap' => $this->fileMap,
            ]);
            $messages = $fallback->loadMessages($category, $language);
        }
 
        return $messages;
    }
 
    protected function loadFallbackMessages($category, $fallbackLanguage, $messages, $originalMessageFile)
    {
        $fallbackMessageFile = $this->getMessageFilePath($category, $fallbackLanguage);
        $fallbackMessages = $this->loadMessagesFromFile($fallbackMessageFile);
 
        if (
            $messages === null && $fallbackMessages === null
            && $fallbackLanguage !== $this->sourceLanguage
            && strpos($this->sourceLanguage, $fallbackLanguage) !== 0
        ) {
        } elseif (empty($messages)) {
            return $fallbackMessages;
        } elseif (!empty($fallbackMessages)) {
            foreach ($fallbackMessages as $key => $value) {
                if (!empty($value) && empty($messages[$key])) {
                    $messages[$key] = $value;
                }
            }
        }
 
        return (array) $messages;
    }
}
 

3. The error no longer occurs.

关于作者 · 持续学习与技术实践

我是一名拥有 15 年以上开发经验的技术从业者,自 2013 年起持续运营个人技术博客,记录工作与个人项目中遇到的真实问题,以及解决问题过程中的探索、实践和思考。

除了技术写作,我也在持续开发和维护自己的独立项目,探索新技术和新工具在实际场景中的应用。我始终相信,没有不值得去解决的问题,也没有不值得去学习的技术。

如果这篇文章对你有所帮助,欢迎浏览博客中的其他文章,也欢迎交流技术经验与想法。

关于我  ·  GitHub  ·  邮件联系