Составляю XML-файл, использую FluidXml и столкнулся с такой проблемой:
в зависимости от условий требуется вывести несколько дополнительных узлов/параметров в теле XML, но не могу сообразить, как это сделать.
Сейчас имею такой код:
$query = AnpProperties::where('published', '>', '0')->get();
$xml = new FluidXml(null, ['encoding' => 'UTF-8' ]);
$xml->addChild('MassUploadRequest', true, ['xmlns' => 'http://assis.ru/ws/api', 'timestamp' => time()]);
foreach($query as $object){
$object_xml = $xml->addChild([
'object' => [
'@externalId' => $object->id,
'@publish' => 'true',
'request' => [
'@xmlns:xsi' => 'http://www.w3.org/2001/XMLSchema-instance',
'common' => [
'@name' => $object->title,
'@description' => $object->description,
'address' => [
'coordinates' => [
'@lat' => $object->latitude,
'@lon' => $object->longitude
]
]
]
],
]
]);
}
Но если, условно, $object->id = 777, то мне нужно в узел "common" добавить еще несколько атрибутов, т.е. код common должен получиться в этом случае примерно такой :
...
'common' => [
'@name' => $object->title,
'@description' => $object->description,
//вот сюда вставить
'@param_1' => 'value_1',
'@param_2' => 'value_2',
//а дальше оставить как есть
'address' => [
'coordinates' => [
'@lat' => $object->latitude,
'@lon' => $object->longitude
]
]
]
...
Т.к. построение идет в цикле, то хотелось бы каким-то образом использовать условие прямо при описании массива. Пробовал через оператор "?:" - безуспешно:
...
'common' => [
'@name' => $object->title,
'@description' => $object->description,
$object->id == 777 ? [
'@param_1' => 'value_1',
'@param_2' => 'value_2',
] : null,
'address' => [
'coordinates' => [
'@lat' => $object->latitude,
'@lon' => $object->longitude
]
]
]
...
Может есть рабочий вариант? или это в принципе невозможно? Спасибо.