Тема 1.7 $этом->переводчик->транс в customerformatter переопределить

Тема 1.7 $этом->переводчик->транс в customerformatter переопределить

03.10.2018 02:01:17 Просмотров 50 Источник

Я переопределяю функцию getFormat () в классе customerformatter. Здесь $this - > translator - > > trans не работает.

Итак, каков наилучший способ вспомнить перевод полей типа

$format['company'] = (new FormField)
->setName('company')
->setType('text')
->setLabel($this->translator->trans(
'Company', [], 'Shop.Forms.Labels'
));

Если я перезапишу весь класс customerformatter, очевидно, все работает. Спасибо

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/52625604/prestashop-1-7-this-translator-trans-in-customerformatter-override#comment92187825_52625604
Не могли бы вы опубликовать весь ваш файл переопределения?
https://stackoverflow.com/questions/52625604/prestashop-1-7-this-translator-trans-in-customerformatter-override#comment92189129_52625604
Например: класс CustomerFormatter расширяет CustomerFormatterCore { общественная функция getFormat() { если (конфигурации::получать('PS_B2B_ENABLE')) { если (контекст::метода getcontext()->печенье->команды mygroup) { $формат['компания'] = (Новый FormField) ..... .... ->setLabel($этом->переводчик->транс( 'компании', [], 'Магазин.Формы.Метки')) - >setRequired (true); ... и так далее

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

Является ответом!
Divyesh Prajapati

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) Проверьте свой магазин.

Надеюсь, это поможет вам!

https://stackoverflow.com/questions/52625604/prestashop-1-7-this-translator-trans-in-customerformatter-override/52639552#comment92252341_52639552
Спасибо большое, все понятно. Это работает.
Закрыть X