PhalconPHP view/layouts/controllers
PhalconPHP view/layouts/controllers
我是 Phalcon 的新手。我创建了一个 PhalconPHP 应用程序,它从数据库中获取菜单元素。我使用布局创建在 index.volt 中调用的菜单,但布局直接调用模型函数。
我认为这不是最好的解决方案,也许我应该在模型和布局之间使用控制器。
布局:
<?php
$menus = Menus::find();
foreach ($menus as $menu) {
echo "<li>".$menu->name."</li>";
}
索引:
<!DOCTYPE html>
<html>
<head>
<title>Phalcon PHP Framework</title>
</head>
<?php $this->partial("layouts/menus") ?>
{{ content() }}
</html>
如果有人能告诉我最好的解决方案,我将不胜感激。
在生成菜单的情况下,您可能正在寻找扩展 BaseController class。在所有控制器上生成您需要的内容(如菜单、元数据或面包屑)是一种很好的做法。
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() . '"'
));
但这可能被认为不是一个优雅的解决方案,并且不会阻止您在视图中使用模型,我认为您希望避免这种情况。在视图循环中设置 queryBuilder 和 运行 的构建查询会稍微好一点,只要没有必要,就不会给数据库带来压力。
我是 Phalcon 的新手。我创建了一个 PhalconPHP 应用程序,它从数据库中获取菜单元素。我使用布局创建在 index.volt 中调用的菜单,但布局直接调用模型函数。 我认为这不是最好的解决方案,也许我应该在模型和布局之间使用控制器。
布局:
<?php
$menus = Menus::find();
foreach ($menus as $menu) {
echo "<li>".$menu->name."</li>";
}
索引:
<!DOCTYPE html>
<html>
<head>
<title>Phalcon PHP Framework</title>
</head>
<?php $this->partial("layouts/menus") ?>
{{ content() }}
</html>
如果有人能告诉我最好的解决方案,我将不胜感激。
在生成菜单的情况下,您可能正在寻找扩展 BaseController class。在所有控制器上生成您需要的内容(如菜单、元数据或面包屑)是一种很好的做法。
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() . '"'
));
但这可能被认为不是一个优雅的解决方案,并且不会阻止您在视图中使用模型,我认为您希望避免这种情况。在视图循环中设置 queryBuilder 和 运行 的构建查询会稍微好一点,只要没有必要,就不会给数据库带来压力。