Ответ 1
В мире Symfony2 это явно принадлежит службе. Услуги на самом деле являются нормальными классами, которые привязаны к контейнеру для инъекций зависимостей. Вы можете придать им нужные вам зависимости. Например, скажите, что ваш класс, где находится функция calculate_hash
, находится AlgorithmicHelper
. Служба имеет "глобальные" функции. Вы определяете свой класс следующим образом:
namespace Acme\AcmeBundle\Helper;
// Correct use statements here ...
class AlgorithmicHelper {
private $entityManager;
public function __construct(EntityManager $entityManager) {
$this->entityManager = $entityManager;
}
public function calculate_hash() {
// Do what you need, $this->entityManager holds a reference to your entity manager
}
}
Затем этот класс должен быть ознакомлен с контейнером symfony dependecy. Для этого вы определяете свою службу в файлах app/config/config.yml
, добавляя раздел service
следующим образом:
services:
acme.helper.algorithmic:
class: Acme\AcmeBundle\Helper\AlgorithmicHelper
arguments:
entityManager: "@doctrine.orm.entity_manager"
Только ниже службы, это идентификатор службы. Например, он используется для извлечения вашего сервиса в контроллерах. После этого вы указываете класс службы, а затем аргументы, передаваемые конструктору класса. Обозначение @
означает передачу ссылки на службу с id doctrine.orm.entity_manager
.
Затем в вашем контроллере вы делаете что-то вроде этого, чтобы получить услугу и использовать ее:
$helper = $this->get('acme.helper.algorithmic');
$helper-> calculate_hash();
Обратите внимание, что результат вызова $this->get('acme.helper.algorithmic')
всегда возвращает тот же экземпляр помощника. Это означает, что по умолчанию службы уникальны. Это похоже на одноэлементный класс.
Для получения дополнительной информации я приглашаю вас прочитать Symfony2 book. Проверьте эти ссылки и
- Сервисный контейнер раздел из книги Symfony2.
- Ответ, который я дал для доступа к внешним контроллерам, здесь.
Надеюсь, что это поможет.
С уважением,
Matt