1

カスタムフォームタイプとそれに対応するトランスフォーマーを作成しました。データベースのデータは1つのテキストフィールドに保存されます。「<EN>English text</EN><FR>Frenc text</FR>

そこで、入力ごとに個別のテキストを追加するフォームタイプを作成しました。トランスフォーマーは、入力内のタグの間に正しい値を配置することになっています。

問題は、変換関数に渡されるはずの値をエコーし​​たのですが、空であり、理由がわかりません。

これが私のmultilangタイプです

class MultiLangType extends AbstractType
{
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'type' => 'text',
            'compound' => 'true'
        ));
    }

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $langs = array('EN', 'FR', 'DE');
        $transformer = new StringToMultiTransformer($langs);
        $builder->prependClientTransformer($transformer);
        //$builder->addModelTransformer(new StringToMultiTransformer($langs));
        foreach($langs as $l)
        {
            $builder->add($l, 'text', $options);
        }

    }

    public function getParent()
    {
        return 'field';
    }

    public function getName()
    {
        return 'multilang';
    }
}

そして今私の変圧器

class StringToMultiTransformer implements DataTransformerInterface
{
    private $langs;

    public function __construct(array $langs)
    {
        $this->langs = $langs;
    }

    public function transform($value)
    {
        // var_dump($value); exit;
        $result = array();

        foreach ($this->langs as $l) {
            $ret = preg_match("/<$l>(.*?)<\/$l>/", $value);
            $result[$l] = $ret[1];
        }
        return $result;
    }

    public function reverseTransform($array)
    {
        if (!is_array($array)) {
            throw new UnexpectedTypeException($array, 'array');
        }

        $result = "";
        $emptyKeys = array();

        foreach ($this->langs as $l) {
            $val = $array[$l];
            $result .= "<$l>$val</$l>";
        }

        return $result;
    }

提案を事前に感謝します

4

1 に答える 1

3

あなたの変圧器は複数回呼び出されます。したがって、渡された $value が null かどうかを確認して、アーリー リターンを使用する必要があると思います。

transform()メソッド ロジックの先頭に追加します。

if (!$value) {
    return null;
}

reverseTransform()空値と null 値を考慮しないように、メソッド内でも同じことを行う必要があります。

于 2012-12-27T23:48:46.720 に答える