Как расширить имеющийся бандл для OroCRM (Oro Platform)?

Oro Platform по умолчанию использует функциональность Symfony для возможности расширения бандлов (в терминологии Symfony это называется «наследование»).

Для это вам нужно будет переопределить метод getParent в вашем классе бандла. Давайте предположим что мы используем наш демо бандл для создания нового статейного бандла. Для этого мы будем расширять OroUserBundle, в этом случае файл AcmeNewBundle.php должен выглядеть так:

<?php  
// src/Acme/Bundle/NewBundle/AcmeNewBundle.php
namespace Acme\Bundle\NewBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AcmeNewBundle extends Bundle  
{
    public function getParent()
    {
        return 'OroUserBundle';
    }
}

Теперь давайте проверим, что наше расширение работает — для этого создадим шаблон для пользовательского информационного виджета. Таким образом мы должны создать файл Acme/Bundle/NewBundle/Resources/views/User/widget/info.html.twig (данная структура файлов дублирует структуру файлов бандла) с нашего пользовательского контента:

<div class="widget-content">  
    <div class="row-fluid form-horizontal">
        <div class="responsive-block">
            <h4>My user info widget</h4>
            <b>Username:</b> {{ entity.username }}
        </div>
    </div>
</div>  

Теперь мы можем перейти к представлению страницы пользователя и проверяем изменения виджета:

Вот и все — теперь наш демо-бандл расширяется от OroUserBundle и может переопределить его части.

Особенности и рекомендации

Oro Platform представляет несколько способов расширения ресурсов бандла и каждый из них должен быть использован в конкретном случае. Расширение является самым простым и удобным способом дополнить или изменить функционал основных бандлов. Данный метод широко используется по всей системе. Способы расширения определенных ресурсов (к примеру: файлы конфигурации) будет описано в дальнейших статьях.

Информация об основных частях бандлов которые могут быть расширены и способы для этого:

  • controller – используется расширение бандла (наследование);
  • templates – используется расширение бандла (наследование);
  • bundles – используется файл /Resources/config/oro/bundles.yml;
  • routing –используется файл /Resources/config/oro/routing.yml;
  • twig themes – используется файл /Resources/config/oro/twig.yml;
  • localization – используется файл /Resources/config/oro/locale_data.yml, /Resources/config/oro/name_format.yml, /Resources/config/oro/address_format.yml, /Resources/config/oro/currency_data.yml.