您好我正在尝试创建自定义字段
比如here,但在添加到service.yml
services:
griffin.type.datetime_to_string:
class: griffin\CoreBundle\Form\DateTimeType
arguments: ["@doctrine.orm.entity_manager"]
tags:
- { name: form.type, alias: datetime_to_string }
我得到Catchable Fatal Error: Argument 1 passed to griffin\CoreBundle\Form\DataTransformer\DateTimeToStringTransformer::__construct() must implement interface Doctrine\Common\Persistence\ObjectManager, null given
任何人有这个问题吗?
修改
namespace griffin\CoreBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use griffin\CoreBundle\Form\DataTransformer\DateTimeToStringTransformer;
use Doctrine\Common\Persistence\ObjectManager;
use Symfony\Component\OptionsResolver\OptionsResolverInterface;
/**
* Description of DateTimeType
*
* @author skowron-line
*/
class DateTimeType extends AbstractType {
private $om;
public function __construnct(ObjectManager $om) {
$this->om = $om;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
var_dump($this->om);
$transformer = new DateTimeToStringTransformer($this->om);
$builder->addModelTransformer($transformer);
}
public function setDefaultOptions(OptionsResolverInterface $resolver) {
$resolver->setDefaults(array(
'invalid_message' => 'err',
));
}
public function getParent() {
return 'text';
}
public function getName() {
return 'datetime_to_string';
}
}
并在我的控制器中
$form = $this->createForm(new KlientType(), $klient);
答案 0 :(得分:1)
如果要将自定义FormType用作服务(因为需要注入服务或参数),必须使用服务名称(或别名)将字段添加到构建器,而不是使用新的CustomFormType()。 / p>
$builder->add('date', 'datetime_to_string', array(
// ...
))
自2.0以来,Symfony已经提供了字符串转换的DateTime。
查看Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformer
您可以将日期字段转换为文本输入,并将“widget”选项设置为“single_text”,并将format选项设置为所需的文本表示。
$builder->add('publishedAt', 'date', array(
'widget' => 'single_text',
'format' => 'yyyy-MM-dd',
));
转换为文本输入,此字段可以轻松地与常见的JavaScript Datepickers集成。考虑使用那个而不是你自己的实现。
提示强>
您不必使用“in yml。
包围注入的服务services:
griffin.type.datetime_to_string:
class: griffin\CoreBundle\Form\DateTimeType
arguments: [@doctrine.orm.entity_manager]
tags:
- { name: form.type, alias: datetime_to_string }
当从网络上的教程复制/粘贴时,这通常会导致错误,其中符号会自动转换为与“真实”问号不同的内容。