【发布时间】:2017-02-25 04:56:10
【问题描述】:
我整天都在寻找一种方法来访问 Sylius 中 ProductType(它扩展了 AbstractResourceType)中的通道实体。具体来说,我需要在 ProductType 类 (src/Sylius/Bundle/ProductBundle/Form/Type/ProductType.php) 的 buildForm() 函数中获取“US_Web_Store”频道实体
这是我的代码:
src/Sylius/Bundle/ProductBundle/Form/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']));
[...]
}
}
然后在src/Sylius/Bundle/ProductBundle/Resources/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>
我得到的错误是:
类型错误:传递给 Sylius\Bundle\ProductBundle\Form\Type\ProductType::__construct() 的参数 4 必须实现接口 Doctrine\ORM\EntityManagerInterface,没有给出
我也尝试通过以下方式传递频道存储库:
但是有同样的问题。没有任何东西传递给控制器,所以我确定我在这里遗漏了一些基本的东西。
【问题讨论】:
-
看起来您需要服务定义中的所有四个参数。你只有一个。
-
我不确定其他 3 项服务从何而来,我尝试寻找这些服务却空手而归。但我确信默认情况下它们是从其他地方注入的,我没有添加这些。您会注意到错误只有第四个参数有问题,这是我添加的唯一一个。