我正在使用symfony2.我试图覆盖树枝中的默认div样式表单块.
首先,有没有或知道fieldset和list(ul - > li)方法的可用实现?
我正在尝试采用一种表单类型并显示它,但是我需要用户一次上传补丁上传.所以说上传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
namespace Me\UserBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
/**
* Question
*
* @ORM\Table(name="question")
* @ORM\Entity(repositoryClass="Me\UserBundle\Entity\QuestionRepository")
*/
class Question
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @var string
*
* @ORM\Column(name="questionText", type="text")
*/
private $questionText;
/**
* @var boolean $expanded
*
* @ORM\Column(name="expanded", type="boolean")
*/
private $expanded;
/**
* @var boolean $multiple
*
* @ORM\Column(name="multiple", type="boolean")
*/
private $multiple;
/**
* @var Questionnaire $questionnaire
*
* @ORM\ManyToOne(targetEntity="Questionnaire", …Run Code Online (Sandbox Code Playgroud) 我正在使用Symfony 2.2和最新版本的FOSRestBundle.所以我设法让大多数动作都有效,但我似乎遇到了FormBuilder的问题,我正在通过PUT调用请求.
我检查了请求对象,它来自我的Backbone.je模型,因为它应该(.save())但是在绑定到表单后,实体返回只有id导致flush()抛出错误,因为必需的字段没有填补.
控制器中的操作:
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS ');
header('Allow GET, POST, PUT, DELETE, OPTIONS ');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Headers: Content-Type, *');
use FOS\RestBundle\Controller\FOSRestController;
use FOS\RestBundle\Controller\Annotations as Rest;
use FOS\RestBundle\Routing\ClassResourceInterface;
use FOS\Rest\Util\Codes;
use Symfony\Component\HttpFoundation\Request;
use Greenthumbed\ApiBundle\Entity\Container;
use Greenthumbed\ApiBundle\Form\ContainerType;
class ContainerController extends FOSRestController implements ClassResourceInterface
{
/**
* Put action
* @var Request $request
* @var integer $id Id of the entity
* @return View|array
*/
public function putAction(Request $request, $id)
{
$entity = $this->getEntity($id);
$form = $this->createForm(new …Run Code Online (Sandbox Code Playgroud) 我试图以嵌套的形式存储数据,但在调用时$builder->getData()我总是得到NULL.
有谁知道如何在嵌套表单中获取数据?
这是ParentFormType.php:
class ParentFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('files', 'collection', array(
'type' => new FileType(),
'allow_add' => true,
'allow_delete' => true,
'prototype' => true,
'by_reference' => false
);
}
}
Run Code Online (Sandbox Code Playgroud)
FileType.php
class FileType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
// Each one of bellow calls returns NULL
print_r($builder->getData());
print_r($builder->getForm()->getData());
die();
$builder->add('file', 'file', array(
'required' => false,
'file_path' => 'file',
'label' => 'Select a file to be uploaded', …Run Code Online (Sandbox Code Playgroud) 在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)
如果能,那么这两种方法有什么区别?
谢谢!
我在两个单独的上下文中使用表单类:既创建新记录又编辑该记录.我按如下方式设置了一个后验证器,以检查URL字段是否唯一.
$this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
new sfValidatorDoctrineUnique(array('model' => 'Page', 'column' => array('url')), array('invalid' => 'This URL already exists.'))
)));
Run Code Online (Sandbox Code Playgroud)
当我创建新记录时,验证器工作得很好.但是,在编辑现有记录时,它会抛出错误,因为它将自身检测为重复.换句话说,如果我编辑记录但不对URL进行任何更改,则会引发重复错误.
这一定是一个常见问题,所以我想知道Symfony处理这个问题的方法是什么?基本上我希望它在保存时忽略自身(不存在重复),但仍然运行后验证器以确保不存在真正的重复.
如何在视图中添加保存和返回列表按钮以创建新记录?一般来说,我想要更多的按钮,所以我正在寻找一个通用的答案.
编辑:默认生成器为我提供了两个按钮:
- 保存
- 保存并添加
我想要一个按钮saves and takes me back to the list.而且我还想要一个带有自定义动作的自定义按钮.
让我解释一下实际情况:
我有一个列表操作create,将我带到一个具有一些输入字段的表单.现在我想使用这些字段的数据制作图像.我想在表单的右侧将此图像显示为预览.为此我需要一个预览按钮,这样无论何时按下,它都会将数据提交给自己进行预览和进一步修改.
我希望现在更清楚了.
我有一个映射到表单的实体,但我不希望所有字段都可编辑,但仍希望显示该值.
例如,这是我的表单类型:
class GameHasPlayerType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('inTeam', new TeamPositioningCheckboxType())
->add('positionX', new TeamPositioningNumberType(), array(
'attr' => array(
'class' => 'in-table'
)
))
->add('positionY', new TeamPositioningNumberType(), array(
'attr' => array(
'class' => 'in-table'
)
))
->add('exchanged', new TeamPositioningCheckboxType())
;
}
}
Run Code Online (Sandbox Code Playgroud)
此类型具有自定义表单模板:
{% block team_positioning_widget %}
{% spaceless %}
<td>
{{ form_widget(form.inTeam) }}
</td>
<td>
{{ form.player.firstName }} {# Player is not in …Run Code Online (Sandbox Code Playgroud) 我手动生成表单的请求内容,并希望设置如下数据:
form[1][]=2&form[2][]=3&form[3][]=5&form[4][]=8&form[apply]=
Run Code Online (Sandbox Code Playgroud)
Symfony Request对象有一个getContent()方法,但没有setContent().
如何设置内容?
symfony-forms ×10
symfony ×7
php ×5
symfony-1.4 ×2
symfony-2.3 ×2
symfony1 ×2
twig ×2
doctrine ×1
doctrine-orm ×1
request ×1
symfony-2.4 ×1