Intereting Posts
Можно вставить данные в две разные таблицы в mysql одним вставным запросом php? многие ID-формы PHP-шрифт-lib должен либо быть установлен через композитор, либо скопирован в lib / php-font-lib декодировать цитируемое сообщение для печати в php Является ли их способ разместить контент в IFRAME без использования src Smarty – «невозможно записать файл … templates_c». (smarty_internal_write_file.php: 44) Проблема кодировки символов с PHP Простой HTML DOM Parser Настройка тестов PHPUnit в Laravel Как удалить проверку клиента для полей, если флажок снят с отметки Сохранять разрыв строки из Textarea php – simpleXML Как получить доступ к определенному элементу с тем же именем, что и другие? Найти все hrefs на странице и заменить ссылку, поддерживающую предыдущую ссылку – PHP Как переназначить столбец AUTO_INCREMENT для каждой строки в таблице MySQL с помощью PHP pesky популярный «Нет входного файла». с nginx_php-fastcgi Обработка Php против Apache RewriteRules и RegExp: какой из них быстрее?

Установить значение одного объекта в многомерном массиве в шаблоне ветви

Для потребностей проекта мне нужно изменить данные полей формы до их рендеринга. Для этого я повторяю элементы формы и динамически меняю нужные значения.

Проблема в том, что я не могу изменить значение. Я получил эту ошибку:

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 } 

Solutions Collecting From Web of "Установить значение одного объекта в многомерном массиве в шаблоне ветви"

Чтобы изменить определенный индекс массива, который лучше всего подходит для расширения 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" #}