Пример создания и использования сервисов с кастомными тегами и атрибутами в 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

Установка и настройка MailCatcher

MailCatcher позволяет перехватывать отправленные электронные сообщения. Для меня он удобен тем, что перехваченное сообщение можно просматривать в браузере. Очень удобно, когда нужно настроить текст электронного сообщения, особенно когда речь идет об HTML.

Установка Ruby

В терминале выполняем команды:

sudo apt-add-repository ppa:brightbox/ruby-ng
sudo apt-get update
sudo apt-get install ruby2.2 ruby2.2-dev

Установка и настройка MailCatcher

Для установки в терминале выполянем команду:

sudo gem install mailcatcher

Далее необходимо сделать так, что бы MailCatcher запускался...

Benya

Установка и настройка Varnish

Для установки Varnish логинимся как root:

sudo -i

Затем в терминале выполняем следующие команды:

apt-get install apt-transport-https
curl https://repo.varnish-cache.org/GPG-key.txt | apt-key add -
echo "deb https://repo.varnish-cache.org/ubuntu/ trusty varnish-4.1" \
     >> /etc/apt/sources.list.d/varnish-cache.list
apt-get update
apt-get install varnish

После того, как выполнили команды выходим из под root:

exit

Проверяем установку:

varnishd -V

Должны увидеть примерно следующее:

varnishd (varnish-4.1.2 revision 0d7404e)
Copyright (c) 2006 Verdens Gang AS
Copyright (c) 2006-2015...
Benya