【发布时间】:2016-07-10 12:44:22
【问题描述】:
我不确定这是否是最佳实践或是否可行。
所以我有一种情况,我使用DataTables,我需要将布尔值更改为文本,以便显示真/假而不是数字。但我也需要用不同的语言来做。
由于我在应用程序的几个地方都需要这个,我想我应该创建一个应用程序特定的 Repository 类来扩展 EntityRepository 并将它用作我正在构建的存储库的扩展类。为此,我想注入翻译器对象以翻译一些键,但从未设置翻译:
CustomRepository 类
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
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 的存储库
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);
}
}
【问题讨论】:
标签: symfony doctrine-orm datatables