J'ai cherché toute la journée un moyen d'accéder à une entité de canal dans le ProductType (qui étend AbstractResourceType) dans Sylius. Plus précisément, je dois obtenir l'entité de canal 'US_Web_Store' dans la fonction buildForm() de la classe ProductType (src/Sylius/Bundle/ProductBundle/Forme/Type/ProductType.php)Injecter EntityManager dans AbstractResourceType Sylius
Voici mon code:
src/Sylius/Bundle/ProductBundle/Forme/type/ProductType.php
namespace Sylius\Bundle\ProductBundle\Form\Type;
use Doctrine\ORM\EntityManagerInterface;
class ProductType extends AbstractResourceType
{
private $variantResolver;
private $em;
public function __construct($dataClass, $validationGroups, ProductVariantResolverInterface $variantResolver, EntityManagerInterface $em) {
parent::__construct($dataClass, $validationGroups);
$this->variantResolver = $variantResolver;
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$product = $builder->getData();
$product->addChannel($this->container->get('sylius.repository.channel')->findOneBy(['code' => 'US_Web_Store']));
[...]
}
}
ensuite dans src/Sylius/Bundle/ProductBundle/Ressources/config/services.xml:
<service id="product.form.type.product" class="Sylius\Bundle\ProductBundle\Form\Type\ProductType">
<argument type="service" id="doctrine.orm.entity_manager"/>
</service>
Et l'erreur que je reçois est:
erreur de type: Argument 4 est passé à Sylius \ Bundle \ ProductBundle \ Form \ type \ ProductType :: __ construct() doit mettre en œuvre l'interface Doctrine \ ORM \ EntityManagerInterface, aucune donnée
J'ai aussi essayé passer le dépôt de canal via:
Mais eu le même problème. Rien n'est jamais passé au contrôleur, donc je suis sûr que je manque quelque chose de fondamental ici.
semble que vous avez besoin tous les quatre arguments dans la définition du service. vous n'en avez qu'un. – craigh
Je ne sais pas d'où viennent les 3 autres services, j'ai essayé de les chercher et je suis revenu les mains vides. Mais je suis sûr qu'ils sont injectés d'accord ailleurs, par défaut, je n'ai pas ajouté ceux-ci.Vous remarquerez que l'erreur n'a qu'un problème avec le quatrième argument, et c'est le seul que j'ai ajouté. – carbide20