Symfony – Create a service – the right way

Always create service interface for your service. This way you will have better structured code and phpunit testing will be real pleasure.
Also use dependency injection for your repositories in the service.

Service Interface Example

interface UserServiceInterface{
  public function getUsername();
  public function viewAll();
}

Service Example

class UserService implements UserServiceInterface
{

  private $entityManager;
  private $userRepository;

  public function __construct(EntityManager $entityManager, UserRepository $userRepository)
  {
    $this->entityManager = $entityManager;
    $this->userRepository = $userRepository;
  }

  public function viewAll()
  {
    return $this->userRepository->findAll();
  }
}

Repository Example

class UserRepository extends \Doctrine\ORM\EntityRepository
{
  public function __construct(EntityManager $em, Mapping\ClassMetadata $metadata = null)
  {
    parent::__construct(
      $em,
      $metadata == null ?
      new Mapping\ClassMetadata(User::class) :
      $metadata
    );
  }
}

Leave a Reply

Your email address will not be published. Required fields are marked *