1

わかりました、正直になります。symfony がコアファイルで行う決定のいくつかが気に入らないので、それらを上書きしようとしています。例えば

Symfony/Component/Form/Extension/Core/Type/FieldType.php

im FormView に親がある場合にレンダリングされる名前を変更しようとしています。これは、いくつかのクールな文字列フォーマットを行うためです...

$fullName$idが両方になるようにしようとしてい$form->getName()ます。

 public function buildView(FormView $view, FormInterface $form)
    {
        $name = $form->getName();

        if ($view->hasParent()) {
            $parentId = $view->getParent()->get('id');
            $parentFullName = $view->getParent()->get('full_name');

            // Custom Logic
            //$id = sprintf('%s_%s', $parentId, $name);
            //$fullName = sprintf('%s[%s]', $parentFullName, $name);
            $id = $form->getName();
            $fullName = $form->getName();
        } else {
            $id = $name;
            $fullName = $name;
        }

        $types = array();
        foreach ($form->getTypes() as $type) {
            $types[] = $type->getName();
        }

        $view
            ->set('form', $view)
            ->set('id', $id)
            ->set('name', $name)
            ->set('full_name', $fullName)
            ->set('errors', $form->getErrors())
            ->set('value', $form->getClientData())
            ->set('read_only', $form->isReadOnly())
            ->set('required', $form->isRequired())
            ->set('max_length', $form->getAttribute('max_length'))
            ->set('pattern', $form->getAttribute('pattern'))
            ->set('size', null)
            ->set('label', $form->getAttribute('label'))
            ->set('multipart', false)
            ->set('attr', $form->getAttribute('attr'))
            ->set('types', $types)
        ;
    }
4

2 に答える 2

1

あなたが試すことができるのは、独自のフォームタイプを構築することだと思います.

独自のフォーム タイプをバンドルに配置して、("TestBundle/Form/Type") のようなクリーンな構造にすることができます。

このフィールドタイプでは、必要な変更を加えることができます。

symfony2 でカスタム フィールド タイプを作成するにはどうすればよいですか?

これは、カスタム フィールド タイプを作成するためのホットな投稿です。

それは短いヒントです。良い解決策を見つけて、それが機能しているかどうか、どのように解決したかを教えていただければ幸いです。

于 2012-04-08T08:48:41.760 に答える
0

ヘルパー関数を構築しました。

public function fixForm(\Symfony\Component\Form\FormView $form)
{
    foreach($form as &$child)
    {
        $name = $child->get('full_name');
        $id = $child->get('id');
        $matches = array();
        preg_match('/^(?<form>.+)\[(?<ele>.+)\]/', $name, $matches);
        if(isset($matches['ele']))
            $child->set('full_name', $matches['ele']);
        $matches = array();
        preg_match('/^(?<first>.+)_(?<second>.+)/', $id, $matches);
        if(isset($matches['second']))
            $child->set('id', $matches['second']);
    }
    return $form;
}

そしてその働き。フォームを修正する必要があるときにこれを呼び出すだけです

于 2012-04-09T17:20:49.920 に答える