もちろん、私は自分のウェブサイトを Hack と XHP に移行しようとしています。以下は、達成したいコード構造の構造です。
<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
section.backstage-header
どうすればいいですか?