我正在尝试将我的网站移至Hack和XHP。下面是我想要实现的代码结构的结构:
50
(注意: <ui:backstageHeader>
<ui:backstageHeader-navItem href="/">stories</ui:backstageHeader-navItem>
<ui:backstageHeader-navItem href="/story/send">send a story</ui:backstageHeader-navItem>
<ui:backstageHeader-navItem href="/aboutus">support</ui:backstageHeader-navItem>
</ui:backstageHeader>
基本上呈现为:ui:backstageHeader-navItem
,因此无需在此处附加其类。)
以下是<a href={$this->:href}>{$this->getCHildren}</a>
的代码:
:ui:backstageHeader
我使用终端使用final class :ui:backstageHeader extends :ui:base {
attribute :div;
children (:ui:backstageHeader-navItem)*;
protected function compose() {
$dom =
<section class="backstage-header">
<div class="container">
<div class="cell-logo">
<a href="/">
<span class="no23-logo-white"></span>
</a>
</div>
<div class="cell-navigation">
</div>
<div class="cell-account">
<div class="cell-login">
<div id="siteNav-login">Autentificare</div>
</div>
</div>
</div>
</section>;
$mainContainer = $dom->getChildren("div")[0];
$cellNavigation = $mainContainer->getChildren("div")[1];
$navItems = <ul class="main-navigation"></ul>;
foreach($this->getChildren() as $child) {
$navItems->appendChild(<li>{$child}</li>);
}
$dom->appendChild($navItems);
return $dom;
}
}
调试我的代码,一切都没问题;但是,当我到达浏览器时,我得到hhvm -m d <file.php>
错误标题。这就是日志所说的:
500
错误来自
Catchable fatal error: Hack type error: Could not find method getChildren in an object of type XHPChild at /var/www/res/ui/backstage-header.php line 25
但是,不知何故,我需要从$cellNavigation = $mainContainer->getChildren("div")[1];
向ul.main-navigation
追加div.cell-navigation
。
我该怎么做?
答案 0 :(得分:1)
根据我的经验,appendChild非常容易出现人为错误。这样做更容易:
$items = (new Vector($this->getChildren()))->map($child ==> <li>{$child}</li>);
return <div id="container">{$items}</div>;
如果您想将孩子们包裹在<li />
。
不确定这是否有效,但它会关闭。
答案 1 :(得分:0)
专业提示:您可以在XHP树中分配变量。
$root =
<div>
{$child = <span>
Text children
</span>}
</div>;
现在$ child已设置为<span>
元素。