#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. Итак, вот окончательный ответ, который мы должны были: — создать метод в репозитории для отслеживания рекламы для удаления — создать службу, которая будет использовать этот метод для удаления рекламы Цель состояла в том, чтобы создать службу, которую мы можем вызывать для удаления других вещей, кроме рекламы