我使用 Symfony 表单 (v3.0),而不使用 Symfony 框架的其余部分。使用 Dotrine v2.5。
我创建了一个表单,这是表单类型类:
class CreateMyEntityForm extends BaseFormType {
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->add('myEntity', EntityType::class);
}
}
加载页面时,出现以下错误。
参数 1 传递给
Symfony\Bridge\Doctrine\Form\Type\DoctrineType::__construct() 必须是
Doctrine\Common\Persistence\ManagerRegistry 的实例,无
给定,在 /var/www/dev3/Vendor/symfony/form/FormRegistry.php 中调用
85号线
我相信这里需要进行一些配置,但我不知道如何创建一个实现 ManagerRegistryInterface 的类 - 如果这是正确的做法。
有什么指点吗?
编辑 - 这是我设置 Doctrine 的代码
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Setup;
class Bootstrap {
//...some other methods, including getCredentials() which returns DB credentials for Doctrine
public function getEntityManager($env){
$isDevMode = $env == 'dev';
$paths = [ROOT_DIR . '/src'];
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode, null, null, false);
$dbParams = $this->getCredentials($env);
$em = EntityManager::create($dbParams, $config);
return $em;
}
}
相信我,你这是在自找麻烦!
EntityType::class
当它无缝集成到“Symfony”框架时就可以工作(幕后有魔法 - 通过 DoctrineBundle)。否则,您需要编写大量代码才能使其正常工作。
不值得付出努力!
如果您创建一个实体存储库并将其注入表单构造函数,然后在ChoiceType::class
场地。像这样的东西:
<?php
# you form class
namespace Application\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class InvoiceItemtType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('product', ChoiceType::class, [
'choices' => $this->loadProducts($options['products'])
]);
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['products' => [],]); # custom form option
}
private function loadProducts($productsCollection)
{
# custom logic here (if any)
}
}
在应用程序的某个地方:
$repo = $entityManager->getRepository(Product::class);
$formOptions = ['products' => $repo->findAll()];
$formFactory = Forms::createFormFactory();
$formFactory->create(InvoiceItemtType::class, new InvoiceItem, $formOptions);
这才是重点!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)