gpt4 book ai didi

forms - 将自定义选项传递给 symfony2 表单

转载 作者:行者123 更新时间:2023-12-02 15:38:53 25 4
gpt4 key购买 nike

在 symfony 1.4 中,可以通过表单的选项参数化表单类定义。有什么方法可以将自定义选项传递给我的自定义表单类型???我尝试使用 buildForm 方法的 options 参数,但我不太确定这个数组是什么,显然它不是我想要的......谢谢!

最佳答案

解决方案很简单,如果您希望自定义选项在 Twig 模板中也可用,则必须使用buildForm 方法中的 $builder->setAttribute()buildView() 方法中的 $view->set() 方法也是如此。

<?php

namespace Acme\DemoBundle\Form\Type;

use Symfony\Component\Form\AbstractType as FormAbstractType;
use Symfony\Component\Form\FormBuilder;
use Symfony\Component\Form\FormView;
use Symfony\Component\Form\FormInterface;

// For Symfony 2.1 and higher:
use Symfony\Component\OptionsResolver\OptionsResolverInterface;

/**
* ImagePreviewType
*
*/
class ImagePreviewType extends FormAbstractType
{

/**
* {@inheritDoc}
* For Symfony 2.0
*/
//public function getDefaultOptions(array $options)
//{
// $options = parent::getDefaultOptions($options);
// $options['base_path'] = 'path/to/default/dir/';
//
// return $options;
//}

/**
* {@inheritDoc}
* For Symfony 2.1 and higher
*/
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'base_path' => '',
));
}

/**
* {@inheritDoc}
*/
public function buildView(FormView $view, FormInterface $form, array $options)
{
// For Symfony 2.0:
// $view->set('base_path', $form->getAttribute('base_path'));

// For Symfony 2.1 and higher:
$view->vars['base_path'] = $options['base_path'];
}

/**
* {@inheritDoc}
*/
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->setAttribute('base_path', $options['base_path'])
;
}

/**
* {@inheritDoc}
*/
public function getName()
{
return 'image_preview';
}

public function getParent(array $options)
{
// for Symfony 2.0:
// return 'field';

// for Symfony 2.1 and higher:
return 'form';
}
}

自定义表单类型的模板(文件...Acme/DemoBundle/Resources/views/Form/fields.html.twig):

{% block image_preview_widget %}
{% spaceless %}
<img src="{{ base_path ~ value }}" alt="" {{ block('widget_container_attributes') }} />
{% endspaceless %}
{% endblock %}

在 app/config/config.yml 中注册自定义表单类型的模板

twig:
debug: %kernel.debug%
strict_variables: %kernel.debug%
form:
resources:
- 'AcmeDemoAdminBundle:Form:fields.html.twig'

用法:在编辑用户个人资料时显示用户图像的预览:

// src/Acme/DemoBundle/Form/Type/UserType.php
namespace Acme\DemoBundle\Form\Type;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class UserType extends AbstractType
{
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('user_profile_image_file_name', new ImagePreviewType(), array(
'base_path' => 'some/other/dir',
));
}
}

2014-08-18:针对 Symfony 2.1 或更高版本进行了更新

关于forms - 将自定义选项传递给 symfony2 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920006/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com