Symfony2, где разместить пользовательские вспомогательные классы - PullRequest
25 голосов
/ 18 марта 2012

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

Ответы [ 6 ]

13 голосов
/ 25 мая 2012

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

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

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

от http://symfony.com/doc/current/cookbook/bundles/best_practices.html

Это означает, что ваши Услуги должны быть помещены в папку под названием «DependencyInjection», а не «Услуги» В полном объеме это должен быть src / Foo / BarBundle / DependencyInjection

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

8 голосов
/ 30 января 2015

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

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

6 голосов
/ 19 марта 2012

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

src/Foo/BarBundle/Service

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

3 голосов
/ 08 октября 2012

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

src/MyBundle/Helper/MyUtilHelper.php

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

$container->get('my_util');

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

2 голосов
/ 19 марта 2012

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

0 голосов
/ 13 июля 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...