В версиях Symfony до 4.0 было рекомендовано организовать собственный код приложения через использование бандлов. Это больше не рекомендуется, и бандлы следует использовать только для совместного использования кода и функций между несколькими приложениями.
Бандлы похожи на плагины в другом программном обеспечении, но даже лучше. Основные функции фреймворка Symfony реализованы с помощью бандлов (FrameworkBundle, SecurityBundle, DebugBundle и т. Д.). Они также используются для добавления новых функций в ваше приложение через сторонние бандлы.
Пакеты, используемые в ваших приложениях, должны быть включены для каждой переменной среды в файле config / bundles.php.
// 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],
// this bundle is enabled only in 'dev' and 'test', so you can't use it in 'prod'
Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
];
В приложении Symfony по умолчанию, которое использует Symfony Flex, пакеты включаются / отключаются автоматически для вас при их установке / удалении, поэтому вам не нужно просматривать или редактировать этот файл bundles.php.
Начните с создания каталога src /Acme/TestBundle/ и добавления нового файла с именем AcmeTestBundle.php:
// src/Acme/TestBundle/AcmeTestBundle.php
namespace App\Acme\TestBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AcmeTestBundle extends Bundle
{
}
Имя AcmeTestBundle соответствует стандартным соглашениям об именах пакетов. Вы также можете сократить имя пакета до TestBundle, назвав этот класс TestBundle (и назвав файл TestBundle.php).
Этот пустой класс — единственное, что вам нужно для создания нового бандла. Хотя этот класс обычно пуст, он является мощным и может использоваться для настройки поведения пакета. Теперь, когда вы создали пакет, включите его:
// config/bundles.php
return [
// …
App\Acme\TestBundle\AcmeTestBundle::class => ['all' => true],
];
Структура директорий в бандлах.
Структура каталогов бандла предназначена для обеспечения согласованности кода между всеми бандлами Symfony. Он следует набору соглашений, но может быть изменен при необходимости:
- Controller/
- Содержит контроллеры бандла (например, RandomController.php).
- DependencyInjection/
- Содержит определенные классы расширения внедрения зависимостей, которые могут импортировать конфигурацию сервисов, регистрировать проходы компилятора или многое другое (этот каталог не обязателен).
- Resources/config/
- Главная конфигурация, включая конфигурацию маршрутизации (например, routing.yaml).
- Resources/views/
- Содержит шаблоны, организованные по имени контроллера (например, Random/index.html.twig).
- Resources/public/
- Содержит веб-ресурсы (изображения, таблицы стилей и т. Д.) И копируется или символически связывается в каталог проекта public / с помощью консольной команды assets: install.
- Tests/
- Каталог содержит тесты для текущего бандла.
Бандл может быть как маленьким, так и большим, в зависимости от реализуемой в нем функции. Он содержит только нужные вам файлы и ничего больше.
В бандлах можно все: сохранять объекты в базе данных, создавать и проверять формы, создавать переводы для вашего приложения, писать тесты и многое другое. У всего будет свое место и роль в бандлах.