我有一个带有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"一切都按预期工作。
感谢。
答案 0 :(得分:1)
输入数据中的换行符可以采用两种形式:\r
或\n
。使用它们分割数据。
return implode("\r\n", $values);