- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正试图在我的包中实现一些可重用的翻译。这些是我的代码的相关部分:
TranslatorKeys.php:
...
/**
* @var \ArrayCollection
*
* @ORM\OneToMany(targetEntity="Jumi\TranslatorBundle\Entity\TranslatorStrings", mappedBy="key")
*/
private $strings;
/**
* @param Doctrine\Common\Collections\ArrayCollection $strings
*/
public function setStrings(ArrayCollection $strings) { // THIS IS LINE 84
$this->strings = $strings;
}
...
TranslatorStrings.php:
/**
* @var integer
*
* @ORM\ManyToOne(targetEntity="Jumi\TranslatorBundle\Entity\TranslatorLanguages", fetch="LAZY")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="language_id", referencedColumnName="id", nullable=false)
* })
*/
private $language;
/**
* @var string
*
* @ORM\Column(name="_value", type="string", nullable=true)
*/
private $value;
/**
* @param string $value
*/
public function setValue($value) {
$this->value = $value;
}
EmbeddableTranslatorKeyType.php:
注意:translator_strings 类型在 TranslatorStringsType.php 中定义
...
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('strings', 'collection', array(
'type' => 'translator_strings',
'options' => array(
'form_type' => $options['form_type'],
'required' => $options['required']
),
'prototype' => true,
'allow_add' => true,
'allow_delete' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'data_class' => 'Jumi\TranslatorBundle\Entity\TranslatorKeys',
'form_type' => 'text'
));
$resolver->addAllowedValues(array(
'form_type' => array(
'text',
'textarea'
)
));
}
...
TranslatorStringsType.php
...
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('value', $options['form_type'], array(
'label' => false,
'required' => $options['required']
));
$builder->add('language', 'hidden');
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'form_type' => 'text',
'data_class' => 'Jumi\TranslatorBundle\Entity\TranslatorStrings'
));
$resolver->addAllowedValues(array(
'form_type' => array(
'text',
'textarea'
)
));
}
...
我正在尝试以这种方式使用 embeddable_translator_key:
注意:标题是 TranslatorKeys 上的多对一关系
$builder->add('title', 'embeddable_translator_key', array(
'label' => 'label_title',
'required' => false
));
现在的问题是,我在将请求绑定(bind)到表单时遇到了这个异常:
Catchable Fatal Error: Argument 1 passed to
Jumi\TranslatorBundle\Entity\TranslatorKeys::setStrings() must be an instance of
Doctrine\Common\Collections\ArrayCollection, array given, called in
E:\prog\SymfonyExperiment\trunk\Symfony\vendor\symfony\symfony\src\Symfony\Component\PropertyAccess\PropertyAccessor.php on line 350 and defined in
E:\prog\SymfonyExperiment\trunk\Symfony\src\Jumi\TranslatorBundle\Entity\TranslatorKeys.php line 84
如果我只是删除 TranslatorKeys 实体中第 84 行的 ArrayCollection 的参数类型定义,并且如果它是数组,则将 $strings 转换为 ArrayCollection,这是一个简单的解决方法,但我宁愿搜索合适的解决方案。
如果我没有提供足够的信息,请随时询问更多信息!
欢迎 Symfony 专家!
最佳答案
这个问题可能与symfony/issues/4519有关.
如果您在表单重构之前使用的是 symfony 版本,则可以通过以下方式解决此问题:
public function setStrings($strings)
{
$this->strings = is_array($strings) ? new ArrayCollection($strings) : $strings;
}
如果您使用的是较新版本的 symfony 而不会发生此错误,您最好对 ArrayCollection 进行类型检查,但对一般的 Collection 进行类型检查或忽略类型-完全检查:
/**
* @param Doctrine\Common\Collections\Collection
*/
public function setStrings(Collection $strings)
关于php - 嵌入式表单生成数组而不是 ArrayCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16758658/
我扩展了 ArrayCollection 类以添加推送方法 package com.cargo.collections { import mx.collections.ArrayCollect
我使用 Symfony2 制作了一个 Web 应用程序,其中用户与实体 Mission 具有数组关联 ManytoMany。用户可以通过表单上传实体$product,表单传递的数据之一是与用户关联的任
我用 Symfony2 制作了一个 Web 应用程序,其中一个 User 有一个数组关联 ManytoMany 与实体 Mission。用户可以通过表单上传实体 $product,表单传递的数据之一是
我在使用 tagsinput 的表单上使用标签: 此插件以单个文本字段结束,其中包含以逗号分隔的标签(例如:tag1,tag2,...) 这些标签目前在非映射表单字段上进行管理: $build
我正在寻找一种为 ODM ArrayCollection 关联数组键的方法。 实体具有以下映射: /** * $fields * * The entities fields * * @ODM
我正试图在我的包中实现一些可重用的翻译。这些是我的代码的相关部分: TranslatorKeys.php: ... /** * @var \ArrayCollection * * @ORM\On
好的,我有一个 User 实体如下 urls = new \Doctrine\Common\Collections\ArrayCollection(); } public functi
我想在 Flex 中迭代 ArrayCollection,同时可以添加和删除项目。 因为我没有找到一种方法来使用像 Java 中那样的“经典”迭代器来完成这项工作。我试过游标。但它并没有真正按照我想要
如果我有一个 ArrayCollection 类型的变量,如何检查集合中是否存在特定名称的键(包括嵌套)。如果确实如此,我如何获取和更改该值? 最佳答案 我猜你正在谈论 Doctrines Array
如果我有一个 ArrayCollection 类型的变量,如何检查集合中是否存在特定名称的键(包括嵌套)。如果确实如此,我如何获取和更改该值? 最佳答案 我猜你正在谈论 Doctrines Array
在对我的数据提供者(数组集合)应用数字排序后,我无法通过 tilelist 重新排序项目。我需要从 arrayCollection 中删除排序吗?如果是这样,是否只是设置 collection.sor
我想创建一个表单来编辑我的用户。与 ManyToMany 关联的用户和角色。在 UserUsers 实体中,我有一个 $roles 变量,它是 ArrayCollection: public func
通常您可以使用以下方法检查变量是否是类的实例: $foo instanceof bar 但是对于 ArrayObjects(属于 Symfony 2),这似乎不起作用 get_class($foo)
即使对象被正确更新,数据似乎也没有持久化,我不明白为什么。 这是我的实体: Article.php /** * @var AttributeInArticle * * @ORM\OneToMan
public function getInvoiceItemsByType($type) { return $this->invoiceItems->filter(function ($inv
考虑以下问题: 我在 Article 和 Author 之间有一个多对一 关联。 class Author{ /** * ... *@var ArrayCollection_of_Ar
我正在尝试按特定字段对 ArrayCollection 进行排序。 ArrayCollection 是一个类(class)数组。在 Course 实体中有一个名为 isLive 的方法,它返回一个 b
我有一些这样的 XML 结构: var struct:XML = ; 我知道我可以通过“id”访问子节点,方式如下: var stuff:Object = struct.(hasO
我正在使用 JMS 序列化程序。当 JsonSerializer 与 Doctrine ArrayCollection 类型一起工作时,它给了我不正确的数组格式。指定的结果应遵循格式 [ {}, {}
在设置了 filterFunction 的 ArrayCollection 上调用 getItemIndex 时遇到了一些问题。 我做了类似 myAC.removeItemAt(myAC.getIte
我是一名优秀的程序员,十分优秀!