1

こんにちは、ここのようなカスタムフィールドを作成しようとしていますが、追加した後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);
4

1 に答える 1

1

カスタム FormType をサービスとして使用する場合 (サービスまたはパラメーターを注入する必要があるため)、new CustomFormType() ではなく、そのサービス名 (またはエイリアス) を使用してフィールドをビルダーに追加する必要があります。

$builder->add('date', 'datetime_to_string', array(
    // ...
))

DateTime から文字列への変換は、Symfony 2.0 以降で既に提供されています。

Symfony/Component/Form/Extension/Core/DataTransformer/DateTimeToStringTransformerをご覧ください

「widget」オプションを「single_text」に設定し、format オプションを目的のテキスト表現に設定して、日付フィールドをテキスト入力に変換できます。

$builder->add('publishedAt', 'date', array(
    'widget' => 'single_text',
    'format' => 'yyyy-MM-dd',
));

テキスト入力に変換されたこのフィールドは、一般的な JavaScript 日付ピッカーと簡単に統合できます。独自の実装ではなく、それを使用することを検討してください。

ヒント:

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 }

これは、シンボルが「実際の」クエスチョン マークとは異なるものに自動変換されるネット上のチュートリアルからコピー/ペーストするときに、エラーを引き起こすことがよくあります。

于 2013-05-24T16:44:30.097 に答える