【问题标题】:Symfony2 doctrine form - entity typeSymfony2学说形式——实体类型
【发布时间】:2014-07-10 11:53:45
【问题描述】:

我正在尝试在 symfony2 表单中添加一个实体字段,但它总是给我同样的错误:'500 (Internal Server Error)'。

这是我用来创建表单的类。它是使用原则和 CRUD 自动编程的。

class ClientType extends AbstractType
{
        /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('companyName', 'text' , array( 'attr' => array( 'class' => 'companyname' ) ) )
            ->add('contactUserName','text' , array( 'attr' => array( 'class' => 'contactusername' ) ))
            ->add('phone','text' , array( 'attr' => array( 'class' => 'phone' ) ))
            ->add('subdomain','text' , array( 'attr' => array( 'class' => 'subdomain' ) ))
            ->add('email','text' , array( 'attr' => array( 'class' => 'email' ) ))
            ->add('website','text' , array( 'attr' => array( 'class' => 'website' ) ))

         ;

    }

这很好,但是,我尝试这样的事情:

->add('client', 'entity', array(
            'class' => 'BackendBundle:Client'));

'500(内部服务器错误)'

我尝试了很多不同的方法来做到这一点,但总是同样的错误。 问题是,我可以添加或删除在开始时由学说 CRUD 完成此类时创建的字段,但如果我尝试添加更多不同类型的字段,我不会这样做。

我应该创建自己的 Type 类以便我可以自定义我的表单还是有办法修改表单原则?

TY

【问题讨论】:

  • 切换到开发模式以获得更多有用的错误信息。
  • 这似乎很明显,但是您知道您添加的每个字段都必须作为属性存在于 Client 类中,并具有适当的 set 方法吗?
  • 请提供实体模型定义

标签: forms symfony doctrine


【解决方案1】:

问题是,我可以添加或删除在 当这门课由学说 CRUD 完成时开始,但如果我尝试 添加更多不同类型的字段,它不会让我。

这是因为创建ClientType.php 的命令是根据BackendBundle\Entity\Client.php 文件的结构创建的。表单将映射到您要创建的实体。如果您想在表单上添加更多字段,则需要将字段作为属性添加到 BackendBundle\Entity\Client.php 中,然后运行:

php bin/console doctrine:generate:entities <VENDOR>/<BUNDLE>/Entity/Client

or if using Symfony 2 < version 2.5

php app/console doctrine:generate:entities <VENDOR>/<BUNDLE>/Entity/Client

为该字段生成 getter 和 setter,然后

php bin/console doctrine:schema:update --force 

or if using Symfony 2 < version 2.5

php app/console doctrine:schema:update --force        

将新字段添加到数据库表中。

现在您可以尝试按原样添加字段,确保add() 方法中的第一个参数与您在实体中命名属性的方式完全匹配。

【讨论】:

  • 我明白,如果我想添加一个不在我的客户端类中的字段,但是当我尝试代码“$builder->add('client', 'entity', array('class' => 'BackendBundle:Client'));",删除所有以前的 'add' 我没有向类添加任何新内容,它们是相同的字段,但我将它们全部调用而不是这样做逐个。据我所知,该类不存储表单输入的类型。然后,我想显示一个已经在课堂上的字段,但是,我不想使用“文本”类型,而是想使用“实体”或“选择”或其他什么。它也不会让我。
  • 我不完全确定你能做到这一点,或者你为什么要这样做
  • 我不能使用除“文本”之外的任何其他类型的表单字段。这是主要问题。我已经添加了其余信息以构成一个好问题,但这就是我想要解决的问题。可能是因为教义 CRUD 吗?根据答案,我将继续研究一个或另一个方向。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多