Как в Magento 2 переопределить системный класс

(Дмитрий Федюк) #1

В Magento 1 системный класс можно переопределить (перекрыть) посредством директивы rewrite в файле etc/config.xml своего модуля.
В Magento 2 системные классы перекрываются в файле etc/di.xml своего модуля посредством директивы preference:

<?xml version='1.0'?>
<config 
    xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' 
    xsi:noNamespaceSchemaLocation='../../../../../lib/internal/Magento/Framework/ObjectManager/etc/config.xsd'
>
    <!--
        Цель перекрытия —
        перевод заголовка страницы
        (в частности, чтобы в административной части в заголовке
        отображалось «Административная часть» вместо «Magento Admin»)
    -->
    <preference for='Magento\Framework\View\Page\Title' type='Rm\Framework\View\Page\Title' />
</config>

Значением атрибута for должен быть перекрываемый системный класс.
Значением атрибута type должен быть перекрывающй класс своего модуля.
Как правило, свой класс наследуется от перекрываемого и переопределяется требуемый метод:

<?php
namespace Rm\Framework\View\Page;
class Title extends \Magento\Framework\View\Page\Title {
    /**
     * Цель перекрытия —
     * перевод заголовка страницы
     * (в частности, чтобы в административной части в заголовке
     * отображалось «Административная часть» вместо «Magento Admin»)
     * @override
     * @param string $title
     * @return Title
     */
    public function set($title) {
        parent::set(__($title));
        return $this;
    }
}
0 Likes

Как добавить Россию в перечень стран, которым доступен приём оплаты через PayPal