Symfony: вопрос о выборе виджета - PullRequest
0 голосов
/ 09 июля 2010

У меня есть виджет выбора в форме:

$years = range(14,130);
$this->widgetSchema['age'] = new sfWidgetFormSchema();
foreach (array('from', 'to') as $value)
{ 
    $this->widgetSchema['age'][$value] = new sfWidgetFormChoice(array(
        'label' => $value,
            'choices' => array_merge(array('' =>  '-'),array_combine($years,$years)))); 
}

Если я выберу, например, 14 и в действии, которое получает форму, написано что-то вроде этого:

var_dump($valores_widgets['age']['from']);

показывает 0. Но я ожидал 14.

Есть идеи?

Привет

* 1013 Javi *

1 Ответ

3 голосов
/ 09 июля 2010

Проверьте документацию array_merge:

Если, однако, массивы содержат цифровые клавиши, позднее значение не будет перезаписать исходное значение, но быть добавленным.

Если все массивы содержат только числовые ключи, результирующий массив данные увеличивающиеся ключи, начиная с ноль.

Быстрый тест:

maerlyn@biliskner:~$ php --run '$years=range(14,16);var_dump(array_merge(array("" =>  "-"), array_combine($years,$years)));'

array(4) {
  [""]=>
  string(1) "-"
  [0]=>
  int(14)
  [1]=>
  int(15)
  [2]=>
  int(16)
}

Итак, ваш массив $ years переиндексируется во время слияния. При использовании оператора + вместо:

maerlyn@biliskner:~$ php --run '$years=range(14,16);var_dump(array("" =>  "-") + array_combine($years,$years));'

array(4) {
  [""]=>
  string(1) "-"
  [14]=>
  int(14)
  [15]=>
  int(15)
  [16]=>
  int(16)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...