メニューを生成する場合、おそらく BaseController クラスを拡張するために探しています。メニュー、メタデータ、ブレッドクラムなど、すべてのコントローラーで必要なコンテンツを生成するための非常に良い方法です。
class BaseController extends \Phalcon\Mvc\Controller {
function initialize() {
$menus = Menus::find(array(
// you may want to condition query based on user cookie
// or controller you are in
'conditions' => 'controller = "' . $this->dispatcher->getControllerName() . '"'
));
// and set it as View variable to use it if you want
$this->view->setVar('menus', $menus);
}
}
そして、それをデフォルトとして使用するようにすべてのコントローラーを設定します。
class DefaultController extends BaseController { }
menus.phtml より:
<?php
foreach ($menus as $menu) {
echo "<li>".$menu->name."</li>";
}
十分なはずです。Voltでより良く見える:
<ul>
{% for menu in menus %}
<li>
<a href="{{ menu.url }}">{{ menu.name }}</a>
</li>
{% enfor %}
ページの 50% でのみコンテンツを生成するなど、より複雑な問題の場合は、ビューのみのパラメーターを設定することをお勧めします。
$this->view->setVar('menus', array(
'conditions' => 'controller = "' . $this->dispatcher->getControllerName() . '"'
));
しかし、それはエレガントな解決策ではないと見なされる可能性があり、ビューでモデルを手に入れることを妨げているわけではありません。これは避けたいと思います。必要でない限り DB に負荷をかけないように、queryBuilderの構築済みクエリを設定し、その in view ループを実行する方が少し良いでしょう。->execute()