自定义表单类型
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Form\FormInterface;
use Symfony\Component\Form\FormView;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Doctrine\ORM\EntityManager;
class NationaliteitidType extends AbstractType
{
private $doctrine;
private $em;
public function __construct(EntityManager $em)
{
$this->em = $em;
}
service.yml 服务:
fw_core.form.type:
class: FW\CoreBundle\Form\Type\NationaliteitidType
arguments:
entityManager: "@doctrine.orm.entity_manager"
错误:
传递给FW \ CoreBundle \ Form \ TypeNationaliteitidType :: __ construct()的参数1必须是Doctrine \ ORM \ EntityManager的实例,没有给出,
我必须做出类型或其他明显的东西,但真的找不到它。
答案 0 :(得分:2)
在您的services.yml中,您无法为未来的变量命名,请尝试以下操作:
services :
fw_core.form.type:
class: FW\CoreBundle\Form\Type\NationaliteitidType
arguments:
- "@doctrine.orm.entity_manager"
答案 1 :(得分:0)
我认为(对于服务容器没有太多帮助,所以请耐心等待)你必须做以下事情(已经由@Touki建议):
services.yml:
fw_core.form.type:
class: FW\CoreBundle\Form\Type\NationaliteitidType
arguments:
entityManager: "@doctrine.orm.entity_manager"
在你的班上:
public function __construct($entityManager)
{
$this->em = $entityManager;
}
您可以看到,__ construct参数(本例中为entityManager)必须与services.yml中冒号前的名称相同。
修改:您可能还需要对代码执行某些操作,请参阅此处:http://symfony.com/doc/current/book/service_container.html
答案 2 :(得分:0)
为什么需要注入实体经理?如果你想根据从db检索到的一些信息来填充一个字段,你应该简单地做一些像
这样的事情$qb_function = function(EntityRepository $rep) use ($bar_parameter) {
return $rep->createQueryBuilder('s')
->where('s.bar = :bar')
->setParameter('bar',$bar_parameter);};
}
$builder->add('foo','entity',array('query_builder')=>qb_function);
答案 3 :(得分:0)
在控制器中 使用PrintelBundle \ Form \ XXXType;
class XXXController extends Controller
{
....
public function newAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$entity = new XXX();
$form = $this->createForm(new XXXType($em), $entity);
...
并在formType
中class XXXType extends AbstractType
{
private $em;
public function __construct($em)
{
$this->em = $em;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$em = $this->em;
........ 完成