我正在尝试下面的场景:
在 myclassType
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('day','hidden')
->add('date', 'hidden' )
->add('hours')
->add('comment','textarea')
;
}
Run Code Online (Sandbox Code Playgroud)
在 myclass
class myclass
{
//.. Other stuff
/**
* @ORM\Column(type="date")
*
* @var date $date
*/
protected $date;
}
Run Code Online (Sandbox Code Playgroud)
渲染时我收到此错误:
An exception has been thrown during the rendering of a template ("Catchable Fatal Error:
Object of class DateTime could not be converted to string in
C:\wamp\www\PMI_sf2\app\cache\dev\twig\fb\40\8957f80f2358a6f4112c3427b387.php line 684") in
form_div_layout.html.twig at line 171.
Run Code Online (Sandbox Code Playgroud)
知道我怎么能隐藏日期类型字段!??
形成
$builder
->add('day','hidden')
->add('date',null,array( 'attr'=>array('style'=>'display:none;')) )
...
Run Code Online (Sandbox Code Playgroud)
从DateTime对象到string创建一个简单的DataTransformer,并创建一个名为'hidden_datetime'的新表单类型,它使用新的DataTransformer并将隐藏的表单类型作为父类.
<?php
namespace YourProject\YourBundle\Form\DataTransformer;
use Symfony\Component\Form\DataTransformerInterface;
class DateTimeToStringTransformer implements DataTransformerInterface
{
public function __construct()
{
}
/**
* @param \DateTime|null $datetime
* @return string
*/
public function transform($datetime)
{
if (null === $datetime) {
return '';
}
return $datetime->format('Y-m-d H:i:s');
}
/**
* @param string $datetimeString
* @return \DateTime
*/
public function reverseTransform($datetimeString)
{
$datetime = new \DateTime($datetimeString);
return $datetime;
}
}
Run Code Online (Sandbox Code Playgroud)
..
<?php
namespace YourProject\YourBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Form\FormBuilderInterface;
use YourProject\YourBundle\Form\DataTransformer\DateTimeToStringTransformer;
class HiddenDateTimeType extends AbstractType
{
public function __construct()
{
}
public function getName()
{
return 'hidden_datetime';
}
public function getParent()
{
return 'hidden';
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$transformer = new DateTimeToStringTransformer();
$builder->addModelTransformer($transformer);
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
parent::setDefaultOptions($resolver);
$resolver->setDefaults(array(
));
}
}
Run Code Online (Sandbox Code Playgroud)
将新的'hidden_datetime'表单类型注册为services.yml中的服务
yourproject.hidden_datetime.form.type:
class: YourProject\YourBundle\Form\Type\HiddenDateTimeType
tags:
- { name: form.type, alias: hidden_datetime }
Run Code Online (Sandbox Code Playgroud)
然后可以在表单中使用新的hidden_datetime类型:
// IN myclassType
public function buildForm(FormBuilder $builder, array $options)
{
$builder
->add('createdAt','hidden_datetime')
->add('comment','textarea')
;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
30616 次 |
| 最近记录: |