Как создать собственный контейнер внедрения зависимостей на PHP

  • PHP
  • 8 месяцев назад

На запрос «контейнер внедрения зависимостей» packagist.org выдает более 95 страниц результатов. Так что можно с уверенностью утверждать, что это «колесо» уже изобретено.

Но ни один шеф-повар не учится готовить только по готовым блюдам. Точно так же, программист не учится только по «готовому коду».

Давайте подумаем, какие задачи мы хотим поручить нашему будущему контейнеру. Для начала выделим в «Контейнере внедрения зависимостей» две роли – «внедрение зависимостей» и «контейнер».

Читать далее...

Путеводитель по Symfony: Диспетчер событий

В этом путеводителе мы будем рассматривать автономные библиотеки (также известные как «Компоненты»), предлагаемые Symfony для создания приложений.

Symfony предлагает компонент EventDispatcher, который позволяет выполнять основные зарегистрированные функции в нашем приложении.

Все основывается на следующем интерфейсе:

<?php

namespace Symfony\Component\EventDispatcher;

interface EventDispatcherInterface
{
    /**
     * @param string   $eventName
     * @param callable $listener
     * @param int      $priority  High priority listeners will be executed first
     */
    public function addListener($eventName, $listener, $priority = 0);

    /**
     * @param string $eventName
     * @param Event  $event
     */
    public function dispatch($eventName, Event $event = null);
}
Читать далее...

Путеводитель Symfony: Компонент HTTPKernel

В этом руководстве мы рассмотрим основные компоненты, с помощью которых создаются приложения:

  • HTTP Kenel и HTTP Foundation
  • Диспетчер событий
  • Маршрутизация и YAML
  • Внедрение зависимости
  • Консоль

Symfony предоставляет компопонет HttpKernel который реализует протокол HTTP: он конвертирует Request в Response.

Все вращается вокруг следующего интерфейса:

<?php

namespace Symfony\Component\HttpKernel;

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

interface HttpKernelInterface
{
    const MASTER_REQUEST = 1;
    const SUB_REQUEST = 2;

    /**
     * @param Request $request
     * @param int     $type
     * @param bool    $catch   Whether to catch exceptions or not
     *
     * @return Response
     */
    public function handle(Request $request, $type = self::MASTER_REQUEST, $catch = true);
}
Читать далее...

Микрофреймворк Symfony

Symfony всегда можно было использовать в качестве микрофреймворка. Среди других микрофреймворков, которые позволяют вам добавлять в них все, что пожелаете, можно выделить Empty Edition и MicroFrameworkBundle.

Существует множество критериев, за счет которых фреймворк классификацируется как «микрофреймворк». Вот некоторые из них:

  • небольшой API (использование кода фреймворка в вашем приложении)
  • мало строк кода (LOC)
  • мало зависимостей (количество используемых сторонних библиотек)
  • небольшой объем (время загрузки фреймворка)
Читать далее...

Улучшенная сериализация с Symfony

Если вы когда-либо создавали сценарий экспорта или API, то вам наверняка приходилось форматировать свой контент и иметь дело с сериализацией.

В Symfony этой задачей зачастую занимается JMS Serializer (так указано в документации Symfony).

Но попользовавшись JMS Serializer в нескольких проектах, я остался им не совсем доволен. Я столкнулся с мелкими недочетами, преимущественно с предположениями, которые не соответствуют моим требованиям и которые невозможно легко переопределить или перезадать. На мой взгляд, один этот факт существенно снижает эффективность JMS Serializer.

Читать далее...

Доступ к данным Google Analytics из Symfony

Существует несколько PHP библиотек, позволяющих получить данные из Google Analytics:

  • GAPI: Google Analytics PHP интерфейс
  • Google API client library: позволяет сразу работать с несколькими продуктами Google, например Google Analytics, Google+ или Google Drive

Обе эти библиотеки используют OAuth2 для авторизации (требование Google). Таким образом предоставляется безопасное соединение и доступ к данным Google Analytics.

Читать далее...

Построение Symfony форм на Bootstrap 3: Вывод блока подсказки

А вот пример результата:

Для начала создадим форму с разметкой bootstrap. Затем добавим подсказку к полю. Есть хорошая новость - начиная с версии 2.6 Symfony уже поддерживает вывод форм с разметкой для bootstrap.

Прежде чем начать, я считаю, что вы уже добавили стили bootstrap в свою разметку страницы. Так же вы должны иметь основные понятия по созданию и выводу форм в Symfony. Если же в каком-то из этих моментов вам не хватает знаний, то я советую прочитать следующие статьи:

Читать далее...

Обзор компонентов Symfony2 : OptionsResolver

Я думаю, вы не раз писали что-то подобное:

$options = [
    'page' => isset($input['page']) ? $input['page'] : 1,
    'items' => isset($input['items']) ? $input['items'] : 10
];

Нам требуется массив пользовательских настроек. В случае отсутствия каких-либо опций мы используем значения по умолчанию. Поэтому, проверяем заданы ли настройки, если нет, то берем значения по умолчанию. Согласитесь, такой код очень плохо читается и занимает довольно много места, так как повторяется этот участок, как правило, далеко не один раз.

Читать далее...