对于项目需求,我需要在渲染之前更改一些表单字段数据。为此,我迭代表单元素并动态更改我需要的值。
问题在于我无法改变价值。我收到了这个错误:
Unexpected token "punctuation" of value "." ("end of statement block" expected).
我使用这段代码来改变价值,但我得到了错误:
{% set arr = arr|merge({'element': 'value'}) %}
有人知道问题出在哪里吗?
这是我用的代码。
Twig模板代码(我使用的示例代码)
<ul>
{% dump (edit_form) %}
{% for element in edit_form.children %}
{% dump (element.vars) %}
{% set element.vars = element.vars|merge({'name': 'My title (just for testing purpose)'}) %}
<li>{{ element.vars.name }}</li>
{% endfor %}
</ul>
表单对象:
FormView {#637 ▼
+vars: array:24 [▶]
+parent: null
+children: array:4 [▼
"title" => FormView {#699 ▼
+vars: array:24 [▼
"value" => "le title"
"attr" => []
"form" => FormView {#699}
"id" => "adminbundle_intro_title"
"name" => "title"
"full_name" => "adminbundle_intro[title]"
"disabled" => false
"label" => null
"label_format" => "admin.intro.form.%name%"
"multipart" => false
"block_prefixes" => array:3 [▶]
"unique_block_prefix" => "_adminbundle_intro_title"
"translation_domain" => null
"cache_key" => "_adminbundle_intro_title_text"
"errors" => FormErrorIterator {#696 ▶}
"valid" => true
"data" => "le title"
"required" => true
"size" => null
"label_attr" => []
"compound" => false
"method" => "POST"
"action" => ""
"submitted" => false
]
+parent: FormView {#637}
+children: []
-rendered: false
}
"content" => FormView {#698 ▶}
"isEnabled" => FormView {#702 ▶}
"_token" => FormView {#711 ▶}
]
-rendered: false
}
答案 0 :(得分:2)
要更改扩展Twig
时最适合的数组的某个索引,可以采用这样的解决方案,
ProjectTwigExtension.php
namespace Your\Namespace;
class ProjectTwigExtension extends Twig_Extension {
public function getFunctions() {
return array(
new Twig_SimpleFunction('set_array_value', array($this, 'setArrayValue'), ['needs_context' => true,]),
new Twig_SimpleFunction('set_object_property', array($this, 'setArrayValue'), ['needs_context' => true,]),
);
}
public function setArrayValue(&$context, $array_name, $index, $value) {
if (!isset($context[$array_name])) return;
if (is_array($context[$array_name])) $context[$array_name][$index] = $value;
elseif(is_object($context[$array_name])) {
if (method_exists($context[$array_name], $index)) $context[$array_name]->{$index}($value);
elseif(method_exists($context[$array_name], 'set'.$index)) $context[$array_name]->{'set'.$index}($value);
}
}
public function getName() {
return 'ProjectTwigExtension';
}
}
将延伸添加到树枝
$twig->addExtension(new \Your\Namespace\ProjectTwigExtension());
/** ... code ... **/
$user = new User();
$user->setUserName('admin');
$twig->render('template.twig', [ 'somearray' => ['foo' => 'bar',], 'user' => $user, ]);
template.twig
{{ dump(somearray) }} {# output: array(1) { ["foo"]=> string(3) "bar" } #}
{{ set_array_value('somearray', 'foo', 'foobar') }}
{{ dump(array) }} {# output: array(1) { ["foo"]=> string(6) "foobar" } #}
{{ dump(user.getUserName()) }} {# output: string(5) "admin" #}
{{ set_object_property('user', 'UserName', 'StackOverflow') }}
{{ dump(user.getUserName()) }} {# output: string(13) "StackOverflow" #}