drupal では、キャッチできない php エラーが次のコードによってスローされます。
/*
* @param $variables
* An associative array containing:
* - element: An associative array containing the properties of the element.
* Properties used: #title, #title_display, #description, #id, #required,
* #children, #type, #name.
*
* @ingroup themeable
*/
function theme_form_element($variables) {
//print_r($variables); die("daa`");
$element = &$variables['element'];
// This is also used in the installer, pre-database setup.
$t = get_t();
// This function is invoked as theme wrapper, but the rendered form element
// may not necessarily have been processed by form_builder().
$element += array(
'#title_display' => 'before',
);
...
drupal の関数の最後の行でエラーがスローされます。
$variables['element']
関数に入ると配列です。参照がそれに割り当てられると、$element
( 内で$variables
) type から typeArray
に変更され&Array
ます。変数$element
はそれ自体を type として報告しますArray
。
次の行は、+= 演算子の代わりに使用した場合、同じエラーをスローしません。
$element = $element + array();
$new = array_merge($element, array());
@iputonmyrobeandwizardhat が sscce を要求したので、以下に提供しようとしました。ただし、コードは、drupal のレンダリング プロセスでの使用中にスローされるのと同じエラーを単独で引き起こすわけではありません。エラーを特定する方法を推奨できる人はいますか?
<?php
function theme_form_element($variables) {
$element = &$variables['element'];
var_dump($variables); //['element'] becomes type &array
//not fatal
$element2 = $element + array( '#title' => 'before');
//not fatal
$element3 = array_merge($element, array( '#title' => 'before'));
$element += array( '#title_display' => 'before');
var_dump($element);
}
$variables_array = array
(
'element' => array
(
'#type' => 'textfield',
'#title' => 'First Name:',
'#default_value' => '',
'#size' => 60,
'#maxlength' => 64,
'#description' => 'First name',
'#required' => 1,
'#input' => 1,
'#autocomplete_path' => '',
'#process' => Array ('ajax_process_form'),
'#theme' => 'textfield',
'#theme_wrappers' => Array('form_element'),
'#defaults_loaded' => 1,
'#tree' => '',
'#parents' => Array('first_name'),
'#array_parents' => Array('first_name'),
'#weight' => 0,
'#processed' => 1,
'#attributes' => Array(),
'#title_display' => 'before',
'#id' => 'edit-first-name',
'#name' => 'first_name',
'#value' => '',
'#ajax_processed' => '',
'#sorted' => 1,
'#children' => '<input type="text" id="edit-first-name" name="first_name" value="" size="60" maxlength="64" class="form-text required" />'
)
);
?>
入力:
// base64_encode(serialize($variables));
YToxOntzOjc6ImVsZW1lbnQiO2E6MjY6e3M6NToiI3R5cGUiO3M6OToidGV4dGZpZWxkIjtzOjY6IiN0aXRsZSI7czoxMToiRmlyc3QgTmFtZToiO3M6MTQ6IiNkZWZhdWx0X3ZhbHVlIjtzOjA6IiI7czo1OiIjc2l6ZSI7aTo2MDtzOjEwOiIjbWF4bGVuZ3RoIjtpOjY0O3M6MTI6IiNkZXNjcmlwdGlvbiI7czoxMDoiRmlyc3QgbmFtZSI7czo5OiIjcmVxdWlyZWQiO2I6MTtzOjY6IiNpbnB1dCI7YjoxO3M6MTg6IiNhdXRvY29tcGxldGVfcGF0aCI7YjowO3M6ODoiI3Byb2Nlc3MiO2E6MTp7aTowO3M6MTc6ImFqYXhfcHJvY2Vzc19mb3JtIjt9czo2OiIjdGhlbWUiO3M6OToidGV4dGZpZWxkIjtzOjE1OiIjdGhlbWVfd3JhcHBlcnMiO2E6MTp7aTowO3M6MTI6ImZvcm1fZWxlbWVudCI7fXM6MTY6IiNkZWZhdWx0c19sb2FkZWQiO2I6MTtzOjU6IiN0cmVlIjtiOjA7czo4OiIjcGFyZW50cyI7YToxOntpOjA7czoxMDoiZmlyc3RfbmFtZSI7fXM6MTQ6IiNhcnJheV9wYXJlbnRzIjthOjE6e2k6MDtzOjEwOiJmaXJzdF9uYW1lIjt9czo3OiIjd2VpZ2h0IjtpOjA7czoxMDoiI3Byb2Nlc3NlZCI7YjoxO3M6MTE6IiNhdHRyaWJ1dGVzIjthOjA6e31zOjE0OiIjdGl0bGVfZGlzcGxheSI7czo2OiJiZWZvcmUiO3M6MzoiI2lkIjtzOjE1OiJlZGl0LWZpcnN0LW5hbWUiO3M6NToiI25hbWUiO3M6MTA6ImZpcnN0X25hbWUiO3M6NjoiI3ZhbHVlIjtzOjA6IiI7czoxNToiI2FqYXhfcHJvY2Vzc2VkIjtiOjA7czo3OiIjc29ydGVkIjtiOjE7czo5OiIjY2hpbGRyZW4iO3M6MTIxOiI8aW5wdXQgdHlwZT0idGV4dCIgaWQ9ImVkaXQtZmlyc3QtbmFtZSIgbmFtZT0iZmlyc3RfbmFtZSIgdmFsdWU9IiIgc2l6ZT0iNjAiIG1heGxlbmd0aD0iNjQiIGNsYXNzPSJmb3JtLXRleHQgcmVxdWlyZWQiIC8+Ijt9fQ==