Вы правы в том, что вся ваша бизнес-логика, которую можно повторно использовать, отправляется в службу, чтобы разные контроллеры могли повторно использовать код.
Вы уже ознакомились с "как создатьдокументация по сервису:
Документация по сервисному контейнеру
Я покажу вам скорость разгона.
В config.yml вам нужноОпределите ваш сервис:
services:
pricing_service:
class: Acme\ProductBundle\Service\PricingService
arguments: [@doctrine]
Тогда вам просто нужно создать стандартный PHP-класс для представления вашего сервиса:
namespace Acme\ProductBundle\Service;
class PricingService {
private $doctrine;
function __construct($doctrine) {
$this->doctrine = $doctrine; // Note that this was injected using the arguments in the config.yml
}
// Now the rest of your functions go here such as "getUnitPrice" etc etc.
}
Наконец, чтобы получить ваш сервис от контроллера, вам просто нужноdo:
$pricingService = $this->get('pricing_service');
Существуют и другие способы, которыми вы можете модулировать службу, например не выгружать все ваши службы в config.yml, но все это объясняется в документации.Также обратите внимание, что вы можете добавить любую другую услугу, которую пожелаете, в свою службу, поэтому, если вам нужны такие вещи, как arguments: [@doctrine, @security.context, @validator]
, вы можете делать все эти вещи или даже: [@my_other_service]
.
Я подозреваю из вашего другого вопроса о введенииEntityManager, который вы, возможно, уже заметили, что это был путь, хотя!
Надеюсь, это все еще было полезно для вас!