2012-03-18 2 views
22

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

+2

Вы знаете, ради завершения. Было бы хорошо, если бы вы на самом деле получили правильный ответ на один из приведенных ниже ответов, а затем укажите, как вы внедрили решение, и если оно сработало хорошо для вас в конце. Все дело в том, чтобы давать и принимать, а не просто принимать – abbood

ответ

13

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

следующие классы и файлы имеют специфические огневые:

Service Container Extensions (принадлежат) внедрение зависимости/

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

Это говорит ваши услуги должны быть помещены в папку называемый «DependencyInjection», а не «Services». В полной мере, он должен быть SRC/Foo/BarBundle/внедрение зависимости

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

+8

. Вы ошибаетесь, вы должны хранить DI-расширения в DependencyInjection, а не сами службы. http://symfony.com/doc/current/best_practices/business-logic.html – PachinSV

+0

Я согласен с @PachinSV. На этой странице это явно указано: http://symfony.com/doc/current/cookbook/bundles/extension.html –

2

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

5

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

src/Foo/BarBundle/Service 

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

3

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

src/MyBundle/Helper/MyUtilHelper.php 

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

$container->get('my_util'); 

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

6

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

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

0

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

Смежные вопросы