首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony定制库注入翻译程序

Symfony定制库注入翻译程序
EN

Stack Overflow用户
提问于 2016-07-10 12:44:22
回答 2查看 432关注 0票数 0

我不知道这是否最佳做法或根本不可能。

因此,在我使用DataTables的情况下,我需要将一个布尔值更改为文本,以显示真假,而不是数字。但我也需要用不同的语言来做。

由于我需要在应用程序中的几个地方这样做,我想我应该做一个特定于应用程序的仓库类,它扩展了EntityRepository,并将它用作我正在构建的存储库的扩展类。为此,为了翻译一些键,我想注入translator对象,但是从来没有设置过翻译:

CustomRepository类

代码语言:javascript
复制
class CustomRepository extends EntityRepository
{
    /**
     * @var Translator
     */
    protected $translator;

    /**
     * @param Translator $translator
     */
    public function setTranslator(Translator $translator)
    {
        $this->translator = $translator; //*******this one is not set...
    }

    /**
     * Replace bool results into string values
     *
     * @param $aRes
     * @param $sField
     *
     * @return mixed
     */
    protected function _replaceBoolToStringResult(&$aRes, $sField)
    {
        if (1 == $aRes[$sField]) {
            $aRes[$sField] = str_replace('1', $this->translator->trans('site.true'), $aRes[$sField]);
        } else {
            $aRes[$sField] = str_replace('0', $this->translator->trans('site.false'), $aRes[$sField]);
        }

        return $aRes;
    }
}

services.yml

代码语言:javascript
复制
app.custom.repository:
        class: App\CommonBundle\Repository\CustomRepository
        #should i call here all the constructor vars from EntityRepository class as arguments?
        calls:
            - [setTranslator, ["@translator.default"]]

带有自定义DQL的存储库

代码语言:javascript
复制
class SettingsRepository extends CustomRepository
{
    public function findOverviewSettingsAsJson()
    {
        $aResult = $this->createQueryBuilder('s')
                        ->select('s.identifier, s.type, s.isActive')
                        ->getQuery()
                        ->getScalarResult();

        // ******** HERE I WANT TO USE _replaceBoolToStringResult

        return json_encode($aResult);
    }
}
EN

回答 2

Stack Overflow用户

发布于 2016-07-10 12:48:56

当您将存储库用作服务时,必须使用工厂模式。

见可能的副本:

Symfony 2:从存储库创建服务

如何将存储库注入Symfony2中的服务?

注意:在最新的SF版本中,语法发生了变化:注入/factories.html

编辑:您应该将您的存储库用作服务:

代码语言:javascript
复制
app.custom.repository:
    class: App\CommonBundle\Repository\CustomRepository
    factory: ["@doctrine.orm.entity_manager", getRepository]
    arguments:
        - App\CommonBundle\Entity\CustomEntity
    calls:
        - [setTranslator, ["@translator.default"]]

然后像代码中的任何其他服务一样调用此服务。例如,从控制器内部:

代码语言:javascript
复制
$this->get('app.custom.repository')->...
票数 0
EN

Stack Overflow用户

发布于 2016-07-10 13:17:32

我发现Matthias的这篇文章在这个问题上很有用。(我知道只有链接才会对答案不屑一顾。)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38292012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档