标签: symfony-forms

Symfony 2嵌入式表格

我正在将表单类型嵌入到另一种表单类型中

$builder->add('parent', new \Company\Bundle\Form\UserObjects\AParentType);
Run Code Online (Sandbox Code Playgroud)

但是当我尝试将请求绑定到表单时

if($request->getMethod() == 'POST') {
      $form->bindRequest($request);
}
Run Code Online (Sandbox Code Playgroud)

我收到了错误

可捕获的致命错误:传递给Company\Bundle\Entity\UserObjects\User :: setParent()的参数1必须是Company\Bundle\Entity\UserObjects\_AParent的实例,给定的数组,在/ Volumes/Media/Symfony/vendor中调用第346行的/symfony/src/Symfony/Component/Form/Util/PropertyPath.php,在/Volumes/Media/Symfony/src/Company/Bundle/Entity/UserObjects/User.php第771行中定义

似乎表单将"AParent"对象作为数组而不是实体传递.有任何想法吗?

编辑

user.php的

    <?php
    // src/Company/Bundle/Entity/UserObjects/Users.php

    namespace Company\Bundle\Entity\UserObjects;

    use Symfony\Component\Security\Core\User\UserInterface;

    use Doctrine\ORM\Mapping as ORM;

    /**
     * @ORM\Entity(repositoryClass="Company\Bundle\Repository\UserObjects\UserRepository")
     * @ORM\Table(name="user")
     * @ORM\HasLifecycleCallbacks()
     */
    class User implements UserInterface, \Serializable
    {
         /**
         * @ORM\Id
         * @ORM\Column(type="integer")
         * @ORM\GeneratedValue(strategy="AUTO")
         */
        protected $id;

         /**
         * @ORM\Column(type="string")
         */
        protected $username;

         /**
         * @ORM\Column(type="string")
         */
        protected $password;

         /**
         * @ORM\Column(type="string")
         */
        protected $securityQuestion;

         /**
         * @ORM\Column(type="string")
         */
        protected $securityAnswer;

         /**
         * …
Run Code Online (Sandbox Code Playgroud)

php forms symfony-forms symfony

9
推荐指数
1
解决办法
1万
查看次数

如何在Symfony2表单中为集合添加自动完成字段并使用Propel?

我正在使用带有PropelBundle的Symfony 2.1表单,我正在尝试重构一个具有下拉列表对象(从中选择)的表单,而不是使用jquery自动完成字段(使用AJAX).对于下拉列表,我在表单类型中使用以下代码(对于下拉列表非常有效):

$builder->add('books', 'collection', array(
    'type'          => 'model',
    'options'       => array(
        'class'     => 'MyVendor\MyBundle\Model\Book',
        'property'  => 'title',
    ),
    'allow_add'     => true,
    'allow_delete'  => true,
    'by_reference'  => false,
    'required'      => false,
));
Run Code Online (Sandbox Code Playgroud)

对于给一点背景知识的缘故,让我们说,我们正在创造一个新的"阅读器"对象,我们想从现有的"书"对象的列表中选择读者喜爱的书籍.使用集合类型,以便可以在新的"阅读器"表单中选择许多"最喜欢的书籍".现在,我想更改上面的内容以使用自动完成功能.为此,我尝试实现一个Data Transformer,以便能够从简单的文本字段获取Book对象,该文本字段可用于自动完成功能,以传递本问题答案中指示的Book ID .但是,我无法弄清楚如何使Data Transformer与集合类型和Propel类一起工作.我创建了一个BookToIdTransformer类,如Symfony Cookbook中所示,并在"ReaderType"文件中尝试了以下内容:

$transformer = new BookToIdTransformer();
$builder->add(
        $builder->create('books', 'collection', array(
            'type'          => 'text',
            'allow_add'     => true,
            'allow_delete'  => true,
            'by_reference'  => false,
            'required'      => false,
        ))->addModelTransformer($transformer)
);
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,我得到了一个"调用未定义的方法:getId"异常(显然,Transformer期望一个PropelCollection of Books,而不是一个Book对象......).有谁知道如何去做?或者让我知道是否有其他方法可以使用Propel在Symfony中实现自动完成并允许选择多个对象(例如书籍集合)?

propel symfony-forms symfony-2.1

9
推荐指数
1
解决办法
2万
查看次数

在symfony2.1表单中使用实体字段类型

使用Symfony 2.1.3-dev和Doctrine 2.3

我正在尝试构建一个表单,为用户提供多个选项来过滤返回的数据集(Entity\EngineCodes).的形式由1个文本输入字段(的id)和3个选择字段(module,type,status).我试图使用Symfony2 entityform_type为EngineCodes实体中的3个选择字段生成值.

因为我想要使用任何3个选择字段的组合来过滤表格.基于2.1文档,我决定创建一个FormType(EngineCodesFilterType)并设置三个表单字段以entity使用query_builder语句键入,以便为每个字段返回一组唯一值.

不幸的是,我收到了跟随错误,我不确定为什么它返回一个数组而不是一个对象.

    The form's view data is expected to be an instance of class
    Vendor\IndexBundle\Entity\EngineCodes, but is a(n) array.
    You can avoid this error by setting the "data_class" option
    to null or by adding a view transformer that transforms a(n)
    array to an instance of Vendor\IndexBundle\Entity\EngineCodes.
Run Code Online (Sandbox Code Playgroud)

如果我设置data_classnull,我收到此错误:

    A "__toString()" method was not …
Run Code Online (Sandbox Code Playgroud)

symfony-forms symfony symfony-2.1

9
推荐指数
2
解决办法
2万
查看次数

Symfony2和Doctrine2:使用两个实体填充表单(一个复杂的场景)

我有5个实体:

  • 用户,
  • 人,
  • UserAffiliation,
  • PersonAffiliation和
  • 联系

这是架构:

在此输入图像描述

一些细节:

  • WebUser是在网站上注册的人员.对于每个Webuser,都有一个人员ID.

  • 一个人可以是网络用户,作者等.

  • 每个WebUser都有0个或更多个从属关系.这些隶属关系是由这个WebUser创建的,并在能干的UserAffiliations中链接.

  • Web用户还可以将他创建的从属关系链接到一个人(如果该人是作者),并且将填充实体人员关系.

我现在正试图让webuser为作者(人)分配一个联盟.为此,我有:

  • 在实体人员中

    @ORM\OneToMany(targetEntity="PersonAffiliation", mappedBy="person", cascade={"persist", "remove"})
    
    protected $affiliations;
    
    Run Code Online (Sandbox Code Playgroud)
  • 在PersonAffiliation中

    @ORM\ManyToOne(targetEntity="Person", inversedBy="affiliations")
    @ORM\JoinColumn(name="person_id", referencedColumnName="id")
    
    protected $person;
    
    @ORM\ManyToOne(targetEntity="Affiliation", inversedBy="person_affiliations")
    @ORM\JoinColumn(name="affiliation_id", referencedColumnName="id")
    
    protected $affiliation;
    
    Run Code Online (Sandbox Code Playgroud)
  • 在实体用户中:

    @ORM\OneToMany(targetEntity="UserAffiliation", mappedBy="user")
    
    protected $affiliations;
    
    
    @ORM\ManyToOne(targetEntity="Person")
    @ORM\JoinColumn(name="person_id", referencedColumnName="id")
    
    protected $person;
    
    Run Code Online (Sandbox Code Playgroud)
  • 在Entity UserAffiliation中

    @ORM\ManyToOne(targetEntity="User", inversedBy="affiliations")
    @ORM\JoinColumn(name="user_id", referencedColumnName="id")
    
    protected $user;
    
    
    @ORM\ManyToOne(targetEntity="Affiliation", inversedBy="user_affiliations")
    @ORM\JoinColumn(name="affiliation_id", referencedColumnName="id")
    
     protected $affiliation;
    
    Run Code Online (Sandbox Code Playgroud)

在表单中,我正在做下一个:

$builder->add('affiliations', 'entity', array(
            'class' => 'SciForumVersion2Bundle:PersonAffiliation',
            'query_builder' => function($em) use ($person){
            return $em->createQueryBuilder('pa')->where('pa.person_id = :id')->setParameter('id', $person->getId());
        },
            'property'    => 'affiliation',
            'multiple' => …
Run Code Online (Sandbox Code Playgroud)

php entity symfony-forms symfony doctrine-orm

9
推荐指数
1
解决办法
1932
查看次数

继承表单或向每个表单添加类型

我正在寻找一种简单的方法来为每个表单添加一组字段.

我找到了一种扩展AbstractTypebuildForm方法,并使用该方法添加更多字段.
在创建表单时,我给出了我的新类型的名称(如何创建自定义表单字段类型).

在我看来,这是一种简单的方法,但每种形式仅限于一种类型.

是否有更好的方法来实现这样的目标?
我已经阅读了symfony的食谱,但我只找到了如何扩展现有表单而不是如何使用我的字段创建自己的表单"模板".

symfony-forms symfony silex symfony-2.4

9
推荐指数
2
解决办法
7737
查看次数

Symfony 2.6 - 按名称呈现个人选择字段(收音机,复选框)

如何在Symfony 2.6中的Twig中渲染单个字段(单个无线电/复选框输入字段)?

假设我有一个简单的形式:

class TransportType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
            $builder->add('transport', 'choice', array(
                'choices' => array(
                    'road' => 'Car/bus',
                    'train' => 'Train',
                ),
                'expanded' => true,
                'multiple' => false
            ));
    }
Run Code Online (Sandbox Code Playgroud)

在以前的Symfony2版本中,我可以使用:

{{ form_widget(form.transport.road) }}
{{ form_widget(form.transport.train) }}
Run Code Online (Sandbox Code Playgroud)

渲染单个单选按钮,但它似乎不再起作用.我知道我可以用:

{{ form_widget(form.transport[0]) }}
{{ form_widget(form.transport[1]) }}
Run Code Online (Sandbox Code Playgroud)

但它的灵活性较差.当然,我可以迭代收集并检查名称,但这似乎是不必要的麻烦.是不是有更简单的方法?

我试过offsetGet(应该这样return a child by name),但它也适用于数组索引.

php symfony-forms symfony twig

9
推荐指数
2
解决办法
9687
查看次数

形成标准数据与查看数据 - 有什么区别?

文件说:

In any form, the three different types of data are:

    Model data - This is the data in the format used in your application (e.g. an Issue object). If you call Form::getData() or Form::setData(), you're dealing with the "model" data.
    Norm Data - This is a normalized version of your data and is commonly the same as your "model" data (though not in our example). It's not commonly used directly.
    View Data - This is the format that's …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

9
推荐指数
1
解决办法
2103
查看次数

表单集合错误

我正在尝试采用一种表单类型并显示它,但是我需要用户一次上传补丁上传.所以说上传30个文件,页面上有30个表格.我收到此错误:

表单的视图数据应该是标量,数组或\ ArrayAccess的实例,但是类MS\CoreBundle\Entity\Photo的实例.您可以通过将"data_class"选项设置为"MS\CoreBundle\Entity\Photo"或通过添加视图转换器来避免此错误,该转换器将类MS\CoreBundle\Entity\Photo的实例转换为标量,数组或\的实例ArrayAccess接口.

图库类型代码是:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('photo', 'collection', array(
        'type' => new PhotoType(),
        'allow_add' => true,
        'data_class' => 'MS\CoreBundle\Entity\Photo',
        'prototype' => true,
        'by_reference' => false,
    ));
}
Run Code Online (Sandbox Code Playgroud)

照片类型代码是:

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('description', 'text', array('label' => "Title:", 'required' => true))
                ->add('File')
                ->add('album', 'entity', array(
                    'class' => 'MSCoreBundle:Album',
                    'property' => 'title',
                    'required' => true,
                    'query_builder' => function(EntityRepository $er)
                    {
                        return $er->createQueryBuilder('a')
                            ->orderBy('a.title', 'ASC');
                    },
                ))
        ;
    }

    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array( …
Run Code Online (Sandbox Code Playgroud)

php symfony-forms symfony

8
推荐指数
1
解决办法
9721
查看次数

Symfony FormType getParent vs Inheritance

在Symfony中创建自定义字段时,我们定义了一个getParent方法

我们通过从AbstractType类扩展来定义我们的类,然后使用getParent方法返回父类型.而不是从父类扩展.

我想知道这种方法背后的哲学.

是否可以定义我的自定义类型:

class ImageType extends FileType
{
    public function getName()
    {
        return 'image';
    }
}
Run Code Online (Sandbox Code Playgroud)

而不是这个:

class ImageType extends AbstractType
{
    public function getParent()
    {
        return 'file';
    }

    public function getName()
    {
        return 'image';
    }
}
Run Code Online (Sandbox Code Playgroud)

如果能,那么这两种方法有什么区别?

谢谢!

symfony-forms symfony

8
推荐指数
2
解决办法
3212
查看次数

Symfony3使用事件动态修改表单

问题是市政领域没有任何东西加载,它是未定义的.在AJAX代码中,我很好地获得了该省的价值.但是在类addMunicipioField.php中没有取$省的值,它始终是nul

在此输入图像描述

我正在尝试制作一个注册表单,其中部分通常的字段(name, nick, password, ...)我还添加了两个依赖字段MunicipalityProvince.

编解码器Controler:

class UserController extends Controller {

private $session;

public function __construct() {
    $this->session = new Session();
}

public function registerAction(Request $request) {

    if (is_object($this->getUser())) {
        return $this->redirect('home');
    }

    $user = new DbUsuario();

    $form = $this->createForm(RegistreUserType::class, $user);

    $form->handleRequest($request);
    if ($form->isSubmitted()) {
        if ($form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $query = $em->createQuery('SELECT u FROM BackendBundle:DbUsuario u WHERE u.email = :email OR u.nick = :nick')
                    ->setParameter('email', $form->get("email")->getData())
                    ->setParameter('nick', $form->get("nick")->getData());

            $user_isset = $query->getResult();

            if …
Run Code Online (Sandbox Code Playgroud)

php events symfony-forms symfony symfony-3.1

8
推荐指数
1
解决办法
980
查看次数