如何在 TYPO3 / Symfony CLI 中设置 Extbase 存储库的语言?

问题描述 投票:0回答:1

我定期开发处理多种语言的导入/导出命令。我总是使用 Extbase 存储库和模型,因此我不必手动连接记录或做其他粗略的事情。

我有将 setRespectSysLanguage 设置为 false 的解决方法,并将 sysLanguageUid 手动添加到每个查询中,但我必须拥有以我需要的语言返回记录的自定义方法。

TYPO3 中是否有一种方法可以在 Symfony 命令中设置特定语言,也许通过语言方面,全局设置,这样我就不必为所有事情使用专门的方法,并且我可以切换到不同的语言,除了默认语言,并以该语言从存储库中获取记录?

symfony typo3 command-line-interface translation extbase
1个回答
0
投票

您可以在存储库类中实现以下方法:

public function setLanguage($langId)
{
    $querySettings = $this->createQuery()->getQuerySettings();
    $querySettings->setLanguageUid($langId);
    $this->setDefaultQuerySettings($querySettings);
}

现在您可以在获取数据之前将语言 ID 设置到您的存储库。 IE。像这样:

// LangId 2 i.e.
$langIdYouWant = 2;
$this->yourRepository->setLanguage($langIdYouWant);
$model = $this->yourRepository->findByAnythingYouWant('WhatYouWant');

请注意,findByUid 方法将忽略设置的 languageId。

您现在可以将语言 ID 传递给 cli 命令,并在执行操作之前更改存储库中的语言。

第一条评论后编辑

如果您需要更自动化一点,您可以执行以下操作。 为您的存储库实现一个基类,该基类将由您的所有存储库实现,如下所示:

class YourRepository extends YourBaseRepository
{
    // Do fancy repo stuff here....
}

在基础存储库中,您可以像这样实现initializeObject方法:

class YourAbstractRepository extends Repository
{
    
    public function initializeObject() {
        parent::initializeObject();
        if(defined('CLI_IMPORT_LANGUAGE_UID')){
            $langId = constant('CLI_IMPORT_LANGUAGE_UID');
            $querySettings = $this->createQuery()->getQuerySettings();
            $querySettings->setLanguageUid($langId);
            $this->setDefaultQuerySettings($querySettings);
        }
    }

}

现在您可以在执行 CommandController 时将语言 ID 传递给它。并将语言 ID 设置为运行时常量。

define('CLI_IMPORT_LANGUAGE_UID', $langUid);

这样,该常量仅可用于命令的导入例程。 这应该可以完成工作。

© www.soinside.com 2019 - 2024. All rights reserved.