PHP опциональная опция

Есть следующий код:

$form->field($model, 'test')->widget(Select2::classname(), [
    'pluginOptions' => [
        'tags' => true,
        'allowClear' => true,
    ],

    'options' => [
        'autocomplete' => 'off',
        'multiple' => true,
        'value' => [$test_var],
    ],
]);

Интересует, как сделать параметр value опциональным, т.е. чтобы если $test_var !== null, то параметр добавлялся, если нет, то и параметра не должно быть. Пытаюсь сделать что-то вроде:

$form->field($model, 'test')->widget(Select2::classname(), [
    'pluginOptions' => [
        'tags' => true,
        'allowClear' => true,
    ],

    'options' => [
        'autocomplete' => 'off',
        'multiple' => true,

        // Пытался так
        ($test_var !== null) ?? 'value' => [$test_var],

        // И так тоже пытался
        if ($test_var !== null) {
            'value' => [$test_var];
        }
    ],
]);

Но так это не работает :( Как можно реализовать подобное?

Понимаю, что если $test_var в первом примере не существует, то ничего не будет вставлено. Однако интересует именно опциональность параметра.


Ответы (1 шт):

Автор решения: teran

обычный путь будет выглядеть таким образом

$options = [....];
if (...condition...) {
    $options['value'] = $test;
}

$this->field(..., [
   'options' => $options,
]);

естественно просто так никаких if-ов посреди массива написать нельзя, как вы пытаетесь это сделать.

Однако можно несколько упростить, особенно с учетом того, что вам массив ассоциативный, то добавить конкатенацию массивов с условным (тернарным) оператором, где вам нужно в зависимости от условия вернуть либо пустой массив, либо нужное значение

'options' => [...options ....]
        + ( expr ? ['value' => $value] : [] )
→ Ссылка