我有一个带有 ChoiceType 字段的 Symfony3 表单。它使用带有 AJAX 数据源的 Select2。这一点工作正常。然而,当表单被提交时,Symfony 验证开始并抱怨:
This value is not valid
Run Code Online (Sandbox Code Playgroud)
我想这是因为通过 AJAX 选择的选择不存在于表单类型的“选择”键中。
我对 Symfony 比较陌生。有人可以指出我正确的方向以禁用现场验证吗?
在Symfony 2.8中,在自定义表单类型中,是否可以使setAllowedValues返回依赖于另一个选项的值的结果?Options据我所知,没有明显的方法可以访问闭包中的对象。
public function configureOptions(OptionsResolver $resolver) {
$resolver->setRequired('option1');
$resolver->setRequired('option2');
$resolver->setAllowedValues('option2', function ($value) {
return $based_on_set_restricted_by_option1; // <-- option2 values are allowed or denied depending on what option1 says
}
}
Run Code Online (Sandbox Code Playgroud)
与我所拥有的解决方案最接近的想法是拥有一个选项,该选项是封装了option1和option2并在其上执行setAllowedValues的字典,但是现在重新构造选项并不容易。
我在训练,但我在symfony 3
我有问题我得到这个错误
给出了"string","Test\FrontBundle\Form\Type\SheetType"类型的预期参数
SheetType.php上的代码是
<?php
namespace Test\FrontBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\FormBuilderInterface;
class SheetType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name',null,array('label'=>'Titre de l\'album'))
->add('type')
->add('artist')
->add('duration')
->add('released', DateType::class)
;
}
}
Run Code Online (Sandbox Code Playgroud)
并在我的SheetController.php我这样做形成我的控制器我不知道我怎么能解决这一切我尝试别的我得到错误
public function createAction(Request $request)
{
$form = $this->createForm(new SheetType());
$form->handleRequest($request);
if($request->isMethod('post') && $form->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($form->getData());
$em->flush();
return $this->redirect($this->generateUrl('test_front_sheet_list'));
}
return $this->render('TestFrontBundle:Sheet:create.html.twig', array('form' => $form->createView()));
}
Run Code Online (Sandbox Code Playgroud) 我想在Twig中知道用户来自哪个URI.例如:
在注册页面上有一个隐藏的输入,用于将用户从他来的地方发回 <input type="hidden" name="_target_path" value="{{ get_uri_from_where_he_came() }}" />
他提交表格并被寄回.
我的问题是,这个枝条功能是什么?
在Symfony 2.8上遇到一个小问题。我有几个数据库字段,一个是整数,一个是十进制。构建表单时,这些字段是下拉列表,因此我使用的是ChoiceType而不是IntegerType或NumberType。
表单实际上可以正常工作,两者之间的内部差异显然不会引起问题,我可以选择一个值并将其正确保存到数据库中。
现在,问题出在侦听器中。更改某些字段后,我需要启动一个额外的过程,因此我有一个事件侦听器,并且正在使用getEntityChangeSet()命令。
我要注意的是它会将这些字段报告为已更改,因为它识别出Vardump输出中可以看到的1000与“ 1000”之间的差异:
"baths" => array:2 [?
0 => 1.5
1 => "1.5"
]
Run Code Online (Sandbox Code Playgroud)
这导致监听器始终触发我的钩子,即使该值确实没有更改。如果我将表单类型更改为Integer,那只是一个文本输入,而我的下拉菜单也会丢失。您如何强制下拉ChoiceType将数字视为数字?
在我的实体中,这是正确定义的:
/**
* @var float
*
* @ORM\Column(name="baths", type="decimal", precision=10, scale=1, nullable=true)
*/
private $baths;
Run Code Online (Sandbox Code Playgroud)
以我的常规形式:
->add('baths', BathsType::class)
Run Code Online (Sandbox Code Playgroud)
引入:
class BathsType extends AbstractType
{
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'choices' => array_combine(range(1,10,0.5),range(1,10,0.5)),
'label' => 'Bathrooms:',
'required' => false,
'placeholder' => 'N/A',
'choices_as_values' => true,
]);
}
public function getParent()
{
return 'Symfony\Component\Form\Extension\Core\Type\ChoiceType';
}
}
Run Code Online (Sandbox Code Playgroud)