Система пакетов
Дата обновления перевода 2021-12-24
Система пакетов
Caution
В версиях Symfony до 4.0, было рекомендовано упорядочивать ваш код, используя пакеты. Это более не рекомендуется и пакеты должны быть использованы только для того, чтобы делиться кодом и функциями между многими приложениями.
Пакет похож на плагин в других ПО, только лучше. Базовые функции фреймворка Symfony релизуются с помощью пакетов FrameworkBundle, SecurityBundle, DebugBundle, и др.). Они также используются для добавления новых функций в ваше приложение через сторонние пакеты.
Пакеты, используемые в вашем приложении, должны быть подключены для каждого
окружения в файле config/bundles.php
:
1 2 3 4 5 6 7 8 9 10 11 12 13
// config/bundles.php
return [
// 'all' means that the bundle is enabled for any Symfony environment
Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
Symfony\Bundle\SecurityBundle\SecurityBundle::class => ['all' => true],
Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
Symfony\Bundle\MonologBundle\MonologBundle::class => ['all' => true],
Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle::class => ['all' => true],
Doctrine\Bundle\DoctrineBundle\DoctrineBundle::class => ['all' => true],
Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle::class => ['all' => true],
// этот пакет включается только в 'dev' и 'test', поэтому вы не можете использовать его в 'prod'
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
];
Tip
В приложении Symfony по умолчанию, которое использует Symfony Flex,
пакеты подключаются и отключаются для вас автоматически при их установке или
удалении, поэтому вам не нужно искать или редактировать файл bundles.php
.
Cоздание пакета
Этот раздел создаёт и включает новый пакет, чтобы продемонстрировать, как это
легко сделать. Новый пакет называется AcmeTestBundle, где часть Acme
- просто
шаблонное имя, которое нужно заменить неким именем "поставщика", который представляет
вас или вашу организацию (например, ABCTestBundle для компании по имени ABC
).
Начните с создания каталога src/Acme/TestBundle/
и добавьте в него новый
файл под названием AcmeTestBundle.php
:
1 2 3 4 5 6 7 8
// src/Acme/TestBundle/AcmeTestBundle.php
namespace App\Acme\TestBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeTestBundle extends Bundle
{
}
Tip
Имя AcmeTestBundle следует
стандартным договоренностям присваивания имен пакетам.
Вы также можете решить укоротить имя пакета до TestBundle, назвав этот класс
TestBundle (и назвав файл TestBundle.php
).
Этот пустой класс – единственное, что вам понадобится для создания нового пакета. Несмотря на то, что чаще всего он пуст, этот класс мощный по возможностям и может быть использован для настройки поведения пакета. Теперь, когда вы создали пакет, подключите его:
1 2 3 4 5
// config/bundles.php
return [
// ...
App\Acme\TestBundle\AcmeTestBundle::class => ['all' => true],
];
И хотя он пока ничего не делает, AcmeTestBundle готов к использованию.
Структура каталога пакета
Структура каталога пакета простая и гибкая. По умолчанию, система пакетов следует набору договоренностей, которые помогают создавать единообразный код для всех пакетов Symfony. Посмотрите на AcmeDemoBundle, так как он содержит некоторые самые распространенные элементы пакета:
Controller/
-
Содержит контроллеры пакета (например,
RandomController.php
). DependencyInjection/
- Содержит некоторые классы расширения внедрения зависимости, которые могут импортировать конфигурацию сервиса, регистрировать пропуски компилятора и т.д. (этот каталог не является обязательным).
Resources/config/
-
Содержит конфигурацию, включая конфигурацию маршрутов (например,
routing.yaml
). Resources/views/
-
Содержит шаблоны, расположенные в алфавитном порядке по имени контроллера
(например,
Random/index.html.twig
). Resources/public/
-
Содержит веб-ресурсы (изображения, таблицы стилей и т.д.); он копируется
или символически привязывается к каталогу проекта
public/
с помощью командной строкиassets:install
. Tests/
- Содержит все тесты пакета.
Пакет может быть настолько большим или маленьким, насколько это диктует реализуемая им функция. Он содержит только те файлы, которые вам нужны, и ничего более.
По ходу прочтения книги, вы узнаете, как сохранять объекты в базе данных, создавать и валидировать формы, создавать переводы вашего приложения, писать тесты и многое другое. Каждая такая возможность имеет свое место и роль в рамках пакета.