Ich habe eine EventSubscriber getan, aber ich brauche EntityManager in verwenden, ich habe die services.yml wie diese gefüllt.Inject EntityManager in einem EventSubscriberInterface
app.subscriber.tube_dynamic_field:
class: AppBundle\Form\EventListener\TubeDynamicFieldSubscriber
arguments: ["@doctrine.orm.entity_manager"]
Ich versuche, es zu benutzen, in den EventSubscriber wie dies:
class TubeDynamicFieldSubscriber implements EventSubscriberInterface
{
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
...
}
Schließlich verwende ich die EventSubscriber in einem Formtype wie folgt aus:
class TubeType extends AbstractType
{
private $dynamicFieldSubscriber;
public function __construct(TubeDynamicFieldSubscriber $subscriber)
{
$this->dynamicFieldSubscriber = $suscriber;
}
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->addEventSubscriber($this->dynamicFieldSubscriber);
}
...
}
Aber Ich habe einen Fehler:
Type error: Argument 1 passed to AppBundle\Form\TubeType::__construct()
must be an instance of AppBundle\Form\EventListener
\TubeDynamicFieldSubscriber, none given
Ich habe versuchen, es zu benutzen: $builder->addEventSubscriber(new TubeDynamicFieldSuscriber())
aber ich habe wieder einen Fehler: Es ist nicht die EntityManager genesen.
Wenn Sie wissen, wie ich den EntityManager in den EventSubscriber injizieren kann :) Vielen Dank.
Können Sie die Klassennamen in Ihre Code-Snippets aufnehmen? – Gerry
um das SOLID-Prinzip zu respektieren, sollten Sie "auf eine Schnittstelle programmieren, keine Implementierung": Ich würde empfehlen, den FormType-Konstruktor zu ändern: 'public function __construct (EventSubscriberInterface $ suscriber) $ $ this-> dynamicField = $ Abonnent; } 'so Ihre Klasse ist nicht eng an Ihren Abonnenten gekoppelt, und Sie können leicht zu einem anderen Abonnenten austauschen – VaN
Ich habe meine Nachricht bearbeitet und Klassennamen enthalten. Okay, für das SOLID-Prinzip gehe ich es lesen. Ich beginne gerade mit Symfony und PHP. Vielen Dank. – mpiot