Использование сервиса в symfony

#symfony

#symfony

Вопрос:

привет 🙂 Я застрял на упражнении, которое мне нужно выполнить с помощью symfony 3, я думаю, что я что-то упускаю, чтобы понять, как работают сервисы… мне не нужна помощь с кодом упражнения, только логическая часть

Цель упражнения — очистить некоторые элементы в базе данных http://localhost/purge/x (x будет параметром для определения того, что удалять в базе данных в моем случае в течение нескольких дней) просмотр не требуется

Хорошо, итак, я делаю маршрут к контроллеру, который вызывает метод в репозитории, чтобы выдать результаты всех элементов, которые мне нужно удалить, и все!

Но нет, упражнение просит меня использовать метод в репозитории сервис, но я не понимаю, что может сделать сервис?? я знаю, как сделать вызов службы и т.д… но в этом случае я просто не понимаю, что я могу дать своему сервису для выполнения… и почему это лучше, чем использовать мою первую идею?

Надеюсь, это понятно, спасибо 🙂

Комментарии:

1. использование сервиса для чего-то подобного кажется мне излишним. Как вы говорите, почему бы просто не использовать метод репозитория, чтобы предоставить вам объекты, а затем удалить их в контроллере.

2. Я думаю, что он должен делать то, что ваш контроллер делает в настоящее время, то есть, как вы сказали: вызовите метод в репозитории, чтобы выдать результаты всех элементов, которые мне нужно удалить, и все . За исключением того, что он также должен удалить их из базы данных. На мой взгляд, упражнение касается создания сервиса, имеющего зависимости от других сервисов.

3. Вы имеете в виду, что репозиторий получает результат, а сервис использует этот результат для удаления его из базы данных?

Ответ №1:

Возможно, что-то вроде:

 class Purger
{
    public function __construct(EntityRepository $repository)
    {
        $this->repository = $repository;
    }
    public function purge($days)
    {
        // Do what needs to be done
        $itemsToPurge = $this->repository->whatever...
    }
}
// Controller Action
$purger = $this->get('purger');
$purger->purge($days);

# services.yml
my_repository:
    class: MyBundleDoctrineMyRepository
    factory:   ['@doctrine.orm.entity_manager', 'getRepository']
    arguments: ['MyBundleEntityMyEntity']
purger:
    class: MyBundlePurger
    arguments: ['@my_repository']
  

И для дополнительной оценки определите свой контроллер как сервис и напрямую введите очиститель. Это может дать вам лучшее представление о возможностях сервисов и о том, почему существует урок.

Комментарии:

1. Хорошо, я понимаю, что вы объяснили, но мы не видели, как построить конструкцию функции… я не думаю, что мы должны его использовать (то же самое для factory в services.yml), мы просто научились создавать простой сервис, поэтому я не вижу, что может сделать мой сервис (с тем, что я должен знать) 🙂

2. Лучше получить разъяснения от вашего инструктора. То, что я опубликовал, в значительной степени стандартно.

3. Итак, вот окончательный ответ, который мы должны были: — создать метод в репозитории для отслеживания рекламы для удаления — создать службу, которая будет использовать этот метод для удаления рекламы Цель состояла в том, чтобы создать службу, которую мы можем вызывать для удаления других вещей, кроме рекламы