Часть 1: Структура Drupal 8

Оригинал публикации: https://cipix.nl/understanding-drupal-8-part-1-general-structure-framework

Началась эра Drupal 8. По сравнению с переходом от 6-й версии к 7-й, где изменения носили скорее эволюционный характер, с приходом Drupal 8 версии произошли революционные изменения, другая архитектура, другая методология кодирования! Эти кардинальные изменения были необходимы для роста профессионализации и глубокой модернизации CMS. Сдвиг в сторону объектно-ориентированной разработки будет принят разработчиками и улучшит общее качество программного обеспечения. Большая благодарность разработчикам ядра Drupal за их смелость и вложенный труд!

Однако, обучение будет сложной задачей для уже практикующих и новых веб разработчиков. Начните задел с прочтения этой статьи! Здесь будет представлена отправная точка перед погружением в разработку модулей на Drupal 8. Автор написал эту статью после разностороннего исследования как Symfony2 так и Drupal 8 в течении нескольких дней, используя пошаговую отладку, чтение кода и статей в интернете. Являясь опытным разработчиком Drupal 7, но ничего не зная о Symfony и о ядре Drupal 8, он полагает, что, распространяя свои знания, он поможет также улучшить и Ваше понимание предмета.

Эта статья будет опубликована в четырех частях. В первой части мы посмотрим на общую структуру фреймворка Drupal 8, особенно в отношении к компонентам Symfony2. Мы увидим, какие компоненты Symfony2 используются в Drupal и как. Во второй части будет подробно рассмотрено все основные service container(контейнера служб). В третьей части будут рассматриваться bootstrapping(процесс начальной загрузки и инициализации) и маршрутизация в Drupal 8. И 4-я заключительная часть обратит внимание на некоторые новые и интересные, необходимые для изучения, "фишки" Drupal 8.

Symfony2

Фреймворк Symfony2 предназначен чтобы дать возможность разработчику создавать индивидуальные веб-ориентированные приложения. Symfony в сыром виде не является CMS, поскольку фреймворк не готов и не может быть использован для администрирования сайта. Вместо этого должен быть написан код для создания своего приложения. Symfony предоставляет возможность писать код эффективно. В теории можно написать полную CMS на Symfony, но на практике, стандартный подход Symfony был признан недостаточно гибким для Drupal.

Вместо этого для Drupal 8 было решено использовать базовые слои Symfony и в свою очередь их, чтобы обеспечить поддержку модулей Drupal.Это привело к правильно сбалансированной системе, которая использует полезную, немодифицированную часть ядра Symfony, но при этом расширяет его очень гибким слоем CMS. Лучшее из обеих миров!

Компоненты

Фреймворк Symfony состоит из различных компонентов. Некоторые из них являются жизненно необходимыми для системы, такие как компонент Http Foundation, который разбирает HTTP и пытается на правильный запрос(request) создать объект(response) ответа, который в свою очередь используется другими компонентами. Другие компоненты являются всего лишь вспомогательными, такие, как Валидатор(Validator), который используется как вспомогательный, для проверки данных (является ли корректным адрес электронной почты, или интернет адрес URL, или номер телефона и т.д.). В основе системы находится компонент ядра Kernel. Этот компонент Kernel, по существу есть "основной класс", который управляет окружением (сервисами и бандлами) и он несет ответственность за обработку HTTP запроса. Разработчик имеет возможность расширить систему за счет расширения ядра, так AppKernel расширяет Kernel, и добавляет свои бандлы. Эти бандлы могуть использоваться для создания частей связанного функционала, аналогично модулям в Drupal.

Drupal использует некоторые из компонентов фреймворка Symfony, как можно видеть на картинке ниже:

Как Drupal 8 наследует Symfony2

В отличие от веб приложений Symfony2, Drupal не расширяет непосредственно Ядро(Kernel). Он предлагает подобный тип функциональности, однако за счет реализации Ядра Интерфейса(Kernel Interface). Так происходит в следствие того, что Drupal не разделяет подход "бандлов" Symfony. Бандлы обеспечивают отличный способ для создания пользовательских веб приложений, но они менее подходят для построения CMS, которая должна быть очень гибкой и расширяемой. Ядро Drupal (DrupalKernel) загружает среду (доступные сервисы и модули) несколько иным (но похожим) способом, чем Ядро (Kernel), однако делегирует обработку запросов к HttpKernel, так же как это делает Ядро Симфы (Symfony's Kernel).

Помимо того, Drupal 8 несет свои собственные (3-rd party) компоненты и код ядра. Схематический обзор показан на рисунке ниже:

Заключение

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

Share this post

Leave a comment

Filtered HTML

  • Web page addresses and e-mail addresses turn into links automatically.
  • Allowed HTML tags: <a> <em> <strong> <cite> <blockquote> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To post pieces of code, surround them with <code>...</code> tags. For PHP code, you can use <?php ... ?>, which will also colour it based on syntax.
  • Lines and paragraphs break automatically.

Plain text

  • No HTML tags allowed.
  • Web page addresses and e-mail addresses turn into links automatically.
  • Lines and paragraphs break automatically.