Textarea字段与数据Transformer

时间:2015-05-12 11:01:20

标签: symfony symfony-forms

我有一个带有textarea字段的表单(用户在每行添加域名)和一个从字符串转换为数组的数据转换器:

$builder->add(
            $builder->create('domains', 'textarea', [
                'trim' => false,
                'constraints' => [
                    new Assert\NotBlank(),
                    new Assert\All([
                        'constraints' => [
                            new Assert\NotBlank(),
                            new Domain(),
                            new RegisterDomain(),
                        ]
                    ])
                ]
            ])->addModelTransformer(new ArrayToStringTransformer())
        );

ArrayToStringTransformer

public function transform($values)
    {
        if (empty($values)) {
            return '';
        }    
        return implode($this->delimiter, $values);        
    }


public function reverseTransform($string)
    {        
        if (!$string) {
            return [];
        }

        return array_filter(array_map('trim', explode($this->delimiter, $string))); 
    } 

每个域都应该在新行上。 但是,当我在reverseTransform上获取字符串值时,该值不会带来新行。我已经在我的字段上将选项trim设置为false。

知道为什么会这样吗?

我的分隔符是:' \ n'但我已经尝试过' \ r \ n'。

似乎解决方案是使用双引号而不是单引号。  所以,如果我使用" \ r \ n"一切都按预期工作。

感谢。

1 个答案:

答案 0 :(得分:1)

输入数据中的换行符可以采用两种形式:\r\n。使用它们分割数据。

return implode("\r\n", $values);