我正在寻找一种在CakePHP3中使用XMLViews时为根节点添加属性的方法。脚本生成一个简单的sitemap.xml,需要urlset
标记中包含的命名空间。没有太多的代码要展示,但无论如何:
function sitemap($language='en') {
[..]
$_rootNode = 'urlset';
$this->set(compact('url'));
$this->set('_rootNode', $_rootNode);
$this->set('_serialize', ['url']);
}
我知道,我可以为XML添加真正的视图,但我更喜欢这样做
答案 0 :(得分:3)
通常可以使用@
前缀定义属性。如果是通用名称空间,您还可以使用xmlns:
密钥。
为了将它们添加到根音符中,您必须将它们设置为与url
变量处于同一级别的视图/序列化变量,例如
$attributes = [
'xmlns:' => 'http://www.sitemaps.org/schemas/sitemap/0.9', // or
// '@xmlns' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
// ...
];
$this->set($attributes + compact('url'));
$this->set('_rootNode', $_rootNode);
$this->set('_serialize', array_merge(array_keys($attributes), ['url']));
这样您最终得到的数据集看起来像
[
'xmlns:' => 'http://www.sitemaps.org/schemas/sitemap/0.9',
// ...
'url' => [
// ...
]
]
和类似
的序列集['xmlns:' /*, ... */, 'url']
另见