Повторно используемые функции фрагментов Symfony2

В последнее время я использую Symfony2 и все время думаю, когда мне следует создавать сервис, а когда класс.

Например, у меня есть небольшая функция фрагмента кода, которую можно использовать повторно. Поэтому из-за этого я не хочу, чтобы этот фрагмент кода был в моем контроллере. Это означает, что я хотел бы использовать его где угодно в моем комплекте.

Это очень просто, но в основном генерирует для меня полный URL-адрес на основе слага/пути. Теперь обратите внимание, что это может быть что угодно, например, customStringGenerator() или что-то в этом роде.

Фрагмент:

public function generateUrlFromPath(Request $request, $path)
{
    return $request->getScheme() . '://' . $request->getHttpHost() . $request->getBasePath() . $path;
}

Теперь я мог бы создать какой-нибудь класс Toolkit или UrlHelper и определить его как службу, чтобы я мог легко внедрить объект Request, но мне кажется чрезмерным создавать службу для такого простого метода.

Что кто подскажет в этом случае? Что бы вы, ребята, сделали, когда создали повторно используемые функции?

Спасибо за вашу помощь.


person Twoez    schedule 02.06.2014    source источник
comment
Для меня в этом случае расширение службы Request symfony является лучшим вариантом, поскольку оно зависит только от объекта Request: stackoverflow.com/questions/11823294/   -  person COil    schedule 02.06.2014


Ответы (2)


Для повторного использования я использую:

  • Services (когда мне нужно внедрить другие зависимости через конструктор), поэтому вам не нужно каждый раз делать это вручную.

  • Вспомогательный контроллер, расширяемый моими контроллерами.

  • Классы с общедоступными статическими функциями.

  • Traits (PHP >= 5.4), когда вам нужно использовать одни и те же методы в нескольких классах, чтобы помочь преодолеть ограничение наследования одного класса.

Для вашей функции там наверху я лично сделал бы защищенную функцию внутри контроллера помощника, но сервис тоже был бы в порядке, даже если это такой маленький фрагмент кода. Позже вы можете написать больше кода для этой службы.

person tomazahlin    schedule 02.06.2014

Вы можете создать класс Utility или даже Utility Bundle со своими повторно используемыми кодами. См. следующие ссылки с инструкциями:
- Symfony 2 - Где я должен разместить служебный класс?
- Где в Symfony разместить классы, которые не являются ни контроллерами, ни моделями?

В зависимости от вашего случая вы можете добавить в свой пакет подпапку Helper (другое пространство имен) и использовать ее методы оттуда. Это, конечно, если вы планируете повторно использовать этот код только внутри этого пакета.

person Debreczeni András    schedule 02.06.2014