我一直在尋找一種方法來訪問Sylius中的ProductType(它擴展了AbstractResourceType)中的通道實體。具體來說,我需要將ProductType類的buildForm()函數中得到 'US_Web_Store' 通道實體(SRC/Sylius /包/ ProductBundle /表/類型/ ProductType.php)將EntityManager注入AbstractResourceType Sylius
這裏是我的代碼:
的src/Sylius /包/ ProductBundle /表/類型/ 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 /包/ ProductBundle /資源/配置/ 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 \包\ ProductBundle \表格\型號\ ProductType :: __結構()必須實現接口學說\ ORM \ EntityManagerInterface參數4,沒有給出
我還試圖通過傳遞渠道的信息庫:
但有同樣的問題。沒有任何事會傳遞給控制器,所以我相信我在這裏錯過了一些基本的東西。
看起來像你需要在服務定義中的所有四個參數。你只有一個。 – craigh
我不確定其他3種服務來自哪裏,我試圖尋找那些並空手而來。但我確定他們是從其他地方默認注入的,我沒有添加這些。你會注意到這個錯誤在第四個參數中只有一個問題,這是我添加的唯一一個。 – carbide20