Я не нашел похожих вопросов/решений Google или в Stackoverflow, поэтому здесь я нуждаюсь в помощи. Я переношу проект PHP из пользовательской структуры в структуру Symfony (v2.5), у которой была запрограммированная инъекция зависимостей (основанная на отражении класса). Многие классы бизнес-логики вводили свойства, и мне интересно, есть ли способ сделать что-то подобное в Symfony, не объявляя эти классы в качестве сервисов, потому что некоторые из классов используются для временного хранения/манипулирования контентом, исходящего из сторонних конечных точек и Мне нужны разные примеры.Symfony2 Dependency Injection для пользовательских/бизнес-классов
Точнее, есть способ использовать Injection Dependency в сочетании с созданием объектов с использованием нового ключевого слова. Поэтому, если мне нужен новый класс, зависящий от регистратора или валидатора, как я могу сделать что-то подобное.
классаМатериалов, которые я хочу, чтобы решить инъекции зависимостей для:
class Content extends SomeObject
{
private $pictureUrl;
...
public __construct(array $array = null)
{
parent::__construct($array);
}
public setPicture(...\Picture $picture)
{
// what's the best way to inject/enable this into my class
$errors = $this->get('validator')->validate($picture->getUrl());
...
$this->pictureUrl = $picture->getUrl();
}
...
}
Класса, который конкретизирует предыдущий класс (в данном случае это может быть услуга, но есть и другие случаи, когда это другое дело логика связанный класс):
class EndpointService extends Service
{
...
public fetchContent()
{
$dataArray = $this->endpoint->fetch();
$contentArray = array();
foreach ($dataArray as $key => $value) {
$content = new Content(array());
$content->setPicture($value->picture);
...
$contentArray[$key] = $content;
}
}
...
}
Примечание: Если есть логические/синтаксические ошибки, пожалуйста, игнорировать их, это пример, через который я демонстрирую свою проблему, и далекая абстракция из моей базы кода.
Это верный момент, спасибо за это, я продолжу в соответствии с вашими советами. Но что, если я все еще хочу делать инъекцию зависимостей в подобных случаях. Есть ли веские причины для этого, то есть я хочу использовать регистратор или что-то подобное в бизнес-классе, который не является сервисом. P.S. Я хотел бы поддержать вас, но моей репутации недостаточно. Редактировать: accidentaly hit введите до конца комментария. –
Спасибо за отзыв; Я ценю это! Re: впрыскивание в классы без обслуживания ... вы можете рассмотреть возможность расширения этих классов [http://api.symfony.com/2.5/Symfony/Component/DependencyInjection/ContainerAware.html](Container Aware). Не уверен, что это лучшая практика. Что мешает вам сделать эти занятия услугами?Я не понимал, как их статус «временные/удерживающие» объекты мешают этому. –
Ну, не все классы соответствуют парадигме обслуживания, например, класс курсора (для разбивки на страницы) - это то, что я имею в виду, и некоторые классы, которые используются для получения стороннего контента на стороне клиента (подобно объектам, но не будут сохраняются). Я ищу способы решения проекта, поскольку он довольно большой и имеет различную инъекцию зависимости (основанную на размышлении), которая сильно отличается от собственной системы DI Symfony. Как вы сказали, я должен пересмотреть свою архитектуру, и я изменю ее на основе практики Symfony, насколько смогу. Еще раз спасибо! :) –