Тема 1.7 $этом->переводчик->транс в customerformatter переопределить
Я переопределяю функцию getFormat () в классе customerformatter. Здесь $this - > translator - > > trans не работает.
Итак, каков наилучший способ вспомнить перевод полей типа
$format['company'] = (new FormField)
->setName('company')
->setType('text')
->setLabel($this->translator->trans(
'Company', [], 'Shop.Forms.Labels'
));
Если я перезапишу весь класс customerformatter, очевидно, все работает. Спасибо


Ответы - Тема 1.7 $этом->переводчик->транс в customerformatter переопределить / Prestashop 1.7 $this->translator->trans in customerformatter override

04.10.2018 08:24:17
Вы получаете ошибку для translator
и language
, потому что в основном основном классе CustomerFormatterCore
; свойства, такие как translator
и language
, имеют private
видимость, поэтому они не могут быть доступны в дочернем классе, который переопределяет класс CustomerFormatter
в нашем случае.
Нам нужно снова объявить эти свойства как private
и ввести их в __construct()
.
Выполните следующие шаги, чтобы достичь того, что вы хотите.
1) создайте файл CustomerFormatter.php
в override\classes\form
и добавьте в нее код ниже.
<?php
/**
* @Override CustomerFormatter
*/
use Symfony\Component\Translation\TranslatorInterface;
class CustomerFormatter extends CustomerFormatterCore
{
private $translator;
private $language;
public function __construct(
TranslatorInterface $translator,
Language $language
) {
parent::__construct($translator, $language);
$this->translator = $translator;
$this->language = $language;
}
public function getFormat()
{
$format = parent::getFormat();
if (Configuration::get('PS_B2B_ENABLE')) {
$format['company'] = (new FormField)
->setName('company')
->setType('text')
->setLabel($this->translator->trans(
'Company', [], 'Shop.Forms.Labels'
));
}
// add formatter here as per your need
return $format;
}
}
2) удалить class_index.php
-файл из var\cache\prod
и var\cache\dev
.
3) Проверьте свой магазин.
Надеюсь, это поможет вам!
