感谢你来到这里
我真的很激动
盼望,能有你的支持
捐赠可扫描二维码转账支付
支付宝扫一扫付款
微信扫一扫付款
(微信为保护隐私,不显示你的昵称)
empty_data
配置选项允许您为表单类指定一个空数据。如果你提交你的表单,这个设置的空数据将会被使用,但他并没有在你的表单中调用setData
或者当你创建表单时传入数据。
例如:
1 2 3 4 5 6 7 8 9 10 11 12 | public function indexAction()
{
$blog = ...;
// $blog is passed in as the data, so the empty_data
// option is not needed
$form = $this->createForm(BlogType::class, $blog);
// no data is passed in, so empty_data is
// used to get the "starting data"
$form = $this->createForm(BlogType::class);
} |
默认情况下,empty_data
设置为 null
。或者,如果你为你的表单类指定了 data_class
选项,它将会默认实例化一个新的这个类。该实例通过调用不含参的构造函数创建。
如果你想去重写所有的行为,这里有两种方式可用:
你会使用这个方式的原因可能是:如果你想去使用一个可以传入参数的构造函数。记住,默认的data_class
配置选项调用的构造函数没有参数。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | // src/AppBundle/Form/Type/BlogType.php
// ...
use Symfony\Component\Form\AbstractType;
use AppBundle\Entity\Blog;
use Symfony\Component\OptionsResolver\OptionsResolver;
class BlogType extends AbstractType
{
private $someDependency;
public function __construct($someDependency)
{
$this->someDependency = $someDependency;
}
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'empty_data' => new Blog($this->someDependency),
));
}
} |
你可以使用你想使用的任何方法来实例化你的类。在这个例子中,我们在BlogType
中传入了一些依赖,然后去使用这些依赖去实例化Blog
类。关键是,你能够将 empty_data
设置到你想使用的全“新的”对象中。
为了传递参数到BlogType
构造函数,你需要去注册它为一个服务并标记form.type
标签。
使用闭包是一个更好的选择,因为它只有在对象需要的时候才会被创建。
这个闭包必须接受一个FormInterface
实例为第一参数:
1 2 3 4 5 6 7 8 9 10 11 12 | use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\FormInterface;
// ...
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'empty_data' => function (FormInterface $form) {
return new Blog($form->get('title')->getData());
},
));
} |
本文,包括例程代码在内,采用的是 Creative Commons BY-SA 3.0 创作共用授权。