Как проверить существует ли Many-To-Many связь у расширяемой сущности

Пример кода, который проверяет, существует ли Many-To-Many связь и если она не существует - создает ее:

<?php

namespace Acme\Bundle\FavoriteBundle\Migrations\Schema\v1_0;

use Doctrine\DBAL\Schema\Schema;
use Oro\Bundle\EntityExtendBundle\EntityConfig\ExtendScope;
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtension;
use Oro\Bundle\EntityExtendBundle\Migration\Extension\ExtendExtensionAwareInterface;
use Oro\Bundle\EntityExtendBundle\Tools\ExtendDbIdentifierNameGenerator;
use Oro\Bundle\MigrationBundle\Migration\Extension\NameGeneratorAwareInterface;
use Oro\...
Benya

Как изменить form_type и form_options у поля, добавленного к расширяемой сущности

Пример кода, который изменяет form_type и form_options у поля:

<?php

namespace Acme\Bundle\MarketBundle\Migrations\Schema\v1_0;

use Acme\Bundle\MarketBundle\Form\Type\MarketSelectType;
use Doctrine\DBAL\Schema\Schema;
use Oro\Bundle\CustomerBundle\Entity\Customer;
use Oro\Bundle\EntityConfigBundle\Migration\UpdateEntityConfigFieldValueQuery;
use Oro\Bundle\MigrationBundle\Migration\Migration;
use Oro\Bundle\MigrationBundle\Migration\QueryBag;

/**
 * Class UpdateFormTypeForCustomerMarketsField.
 *
 * @package Acme\Bundle\MarketBundle\Migrations\Schema\v1_0
 */
class...
Benya

Пример создания и использования сервисов с кастомными тегами и атрибутами в Symfony

Создаем CompilerPass в котором получаем список сервисов помеченых кастомным тегом acme.filter_provider и регистрируем их в registry сервисе:

<?php

namespace Acme\Bundle\AcmeBundle\DependencyInjection\CompilerPass;

use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\DependencyInjection\Exception\LogicException;
use Symfony\Component\DependencyInjection\Reference;

/**
 * Class FilterProviderRegistryCompilerPass.
 *
 * @package Acme\Bundle\AcmeBundle\DependencyInjection\...
Benya

Как добавить новую колонку и уникальный индекс для нее в непустую таблицу

Пример кода, который добавляет новую колонку и уникальный индекс для нее:

<?php

namespace Acme\Bundle\ShippingBundle\Migrations\Schema\v1_0;

use Doctrine\DBAL\DBALException;
use Doctrine\DBAL\Platforms\AbstractPlatform;
use Doctrine\DBAL\Schema\Comparator;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\DBAL\Schema\SchemaException;
use Doctrine\DBAL\Schema\Table;
use Doctrine\DBAL\Types\Types;
use Oro\Bundle\EntityBundle\EntityConfig\DatagridScope;
use Oro\Bundle\EntityExtendBundle\EntityConfig\ExtendScope;
use Oro\Bundle\EntityExtendBundle\Migration\OroOptions;
use Oro\Bundle\...
Benya

Отправка асинхронных http запросов

Пример кода, который отправляет несколько асинхронных http запросов и обрабатывает результаты когда все ответы получены:

<?php

namespace Drupal\example\DataProvider;

use Drupal\Component\Serialization\Json;
use GuzzleHttp\ClientInterface;
use LogicException;
use function GuzzleHttp\Promise\settle;

/**
 * Receives a data from the API.
 */
class ApiDataProvider {

  /**
   * The HTTP client.
   *
   * @var \GuzzleHttp\Client
   */
  protected $httpClient;

  /**
   * ApiDataProvider constructor.
   *
   * @param \GuzzleHttp\ClientInterface $http_client
   *   The HTTP client...
Benya

QueueWorker. Перемещение обработанных задач в конец очереди

В Drupal 8 имеется инструмент для автоматической обработки очередей по крону. Имя ему QueueWorker. Более подробно о нем можно узнать здесь.

Я же расскажу о том, как сделать так, что бы обработанные задачи перемещались в конец очереди для повторной обработки. Причины для такого поведения могут быть самые разные. Например, ноды определенного типа должны синхронизироваться с внешними сервисами до тех пор, пока эти ноды не будут удалены. Для этого мы при создании ноды создаем 1 раз задачу на синхронизацию, а затем QueueWorker будет их помещать в конец очереди для повторной обработки (...

Benya

Программно выполнить Drush команды

Пример программного вызова Drush команд:

<?php

namespace Drupal\example\Commands;

use Consolidation\SiteAlias\SiteAliasManagerAwareInterface;
use Consolidation\SiteAlias\SiteAliasManagerAwareTrait;
use Drush\Drush;

/**
 * Drush command to install and configure website using "minimal" profile.
 */
class ExampeCommands extends DrushCommands implements SiteAliasManagerAwareInterface {

  use SiteAliasManagerAwareTrait;

  /**
   * Install and configure Drupal.
   *
   * @command example:site:install
   *
   * @aliases example:si
   */
  public function install() {
    $this->...
Benya

Search API Solr. Автоисправление ошибок с помощью Solr Spell Checking

На сайте имеется поиск созданный модулями Views и Search API Solr Search. Задача - автоматически исправлять ошибки в искомых словах и показывать результаты для исправленных слов.

Для решения напишем небольшой модуль, который будет зависить от модуля Search API Spellcheck. Устанавливаем его и переходим к написанию собственного модуля. Для примера я назову модуль "search_api_misspell". Создаем файл "search_api_misspell.info":

name = Search misspell
description = Spelling suggestions from Search API services.
core = 7.x
package = Custom

dependencies[] =...
Benya