Подтвердить что ты не робот

Symfony2, где размещать пользовательские вспомогательные классы

Я начинаю с проекта Symfony2. Я знаю основы основы, но у меня есть вопрос: Где подходящее место для размещения тех вспомогательных классов, которые я создаю для помощи или для бизнес-логики?

4b9b3361

Ответ 1

Максимальный ответ правильный. Однако я задаю вопрос о том, как он рекомендует ваш код.

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

Расширения контейнерных контейнеров (входят в состав) DependencyInjection/

из http://symfony.com/doc/current/cookbook/bundles/best_practices.html

Это говорит о том, что ваши службы должны быть помещены в папку под названием "DependencyInjection", а не "Сервисы". В полной мере это должно быть src/Foo/BarBundle/DependencyInjection

Я говорю это как кто-то, у кого был первый, и только что переместил их всех к последнему (!)

Ответ 2

То, что @Adam говорит не так, вам нужно сохранить вложение Dependency Injection Extensions в каталог DependecyInjection, не сами службы. В документации говорится, что вы можете хранить свои (пользовательские) классы бизнес-логики в любом месте, которое вам нравится.

http://symfony.com/doc/current/best_practices/business-logic.html

Ответ 3

Лучший способ сохранить бизнес-логику - создать сервис для обработки всей логики. Так оно будет в:

src/Foo/BarBundle/Service

и вам нужно вызвать службу в services.yml.

Ответ 4

Недавно я немного поработал над существующим проектом Symfony2. Как описано в ответе Tuong Le, я создал классы Helper в каталоге Helper пакета и имени класса с суффиксом Helper, то есть вспомогательный класс находится по адресу:

src/MyBundle/Helper/MyUtilHelper.php

Я могу использовать класс MyUtilHelper в своем пакете, не вызывая контейнер службы, т.е. мне не нужно было звонить.

$container->get('my_util');

Я действительно не знаю, есть ли какая-то специальная конфигурация. в моей настройке; кто-то уже получил настройку, и я просто добавлял новые функции.

Ответ 5

Вы можете создать пользовательские классы под своим Bundle, например, в папке Helper/.. Однако для использования этого помощника в вашем коде вам необходимо определить тех помощников в файле описания сервиса (например, services.xml)... Затем вы можете использовать $container- > get ('your_helper'), →

Ответ 6

Согласно официальной документации - в частности - Symfony Best Practices - вы должны хранить свои службы в папке Утилиты в разделе src. Я верю, что это правильный путь, независимо от того, хотите ли вы или не хотите, чтобы функции, предоставляемые службами вашего пакета, доступны для других частей приложения через Service Container. Кроме того, вы можете хранить вспомогательные классы в любом удобном для вас месте. Что касается ответов @Adam Knowles и @PachinSV - они не совсем правы, потому что они не отвечают на ваш вопрос: "Где подходящее место для поддержки тех вспомогательных классов, которые я создаю для помощи или для бизнес-логики?" или "Где хранить классы, которые я хочу зарегистрировать и использовать через Service Container", но не там, где следует поместить пакетный класс расширения - основная цель - предоставить информацию о конфигурации, которая должна быть автоматически загруженный из вашего пакета в приложения Контейнер службы во время процесса загрузки ядра.