【发布时间】:2017-05-20 14:21:35
【问题描述】:
使用 Symfony 3.2,我会通过构造函数将 entityManager 对象传递给 EntityType 类。
我发现可以使用服务来完成,如下我的配置:
config.yml
imports: - { resource: parameters.yml } - { resource: security.yml } - { resource: services.yml } - { resource: "@mybundle/Resources/config/services.yml" }
services.yml
services: mybundle.profile_key: class: App\Bundle\mybundle\Form\ProfileKeyType arguments: ["@doctrine.orm.entity_manager"]
我的实体类型:
namespace App\Bundle\mybundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\CollectionType;
use Doctrine\ORM\EntityManager;
class ProfileKeyType extends AbstractType
{
private $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('key', TextType::class, array(
"label" => "Chiave identificativa"
))->add('visible', CheckboxType::class, array(
'label' => "Default visible",
"label_attr" => array( 'title' => 'Imposta la visibilità di default di questa chiave' ),
'required' => true
))->add('entity', CollectionType::class, array(
"data_class" => Entity::class
))->add('property')->add('type');
}
/**
* {@inheritdoc}
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'App\Bundle\mybundle\Entity\ProfileKey'
));
}
/**
* {@inheritdoc}
*/
public function getBlockPrefix()
{
return 'app_bundle_mybundle_profilekey';
}
}
当我启动插入页面时,出现此错误:
Type error: Argument 1 passed to App\Bundle\myBundle\Form\ProfileKeyType::__construct() must be an instance of Doctrine\ORM\EntityManager, none given, called in D:\eclipse_neon_workspace\iSerPa\vendor\symfony\symfony\src\Symfony\Component\Form\FormRegistry.php on line 85
怎么了??
提前谢谢
【问题讨论】:
-
是类型问题,参数中使用的类型可能不是
use语句导入的类型。 -
你的意思是ProfileKeyType“使用Doctrine\ORM\EntityManager”中使用的对象与通过services.yml传递的不一样吗??
-
是的,这就是我的意思,但我看到的是
@doctrine.orm.entity_manager代表Doctrine\ORM\EntityManager,这很奇怪。如果你有,请尝试使用另一个 entityManager -
a) 如果您还没有这样做,请清除您的缓存。 b)使用该 FormType 发布控制器,确保您没有尝试自己直接实例化该类。 (例如,通过带有类名的 createForm,在这种情况下使用服务名)
标签: symfony entitymanager