我是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 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() . '"'
));
但这可能不是一个好的解决方案,并且不会阻止您使用View中的模型,这是我想避免的.稍微好一点的方法是将构建的查询设置为queryBuilder并在视图循环中运行其-> execute(),以在不需要时不给DB施加压力.
标签:phalcon,volt,view,php 来源: https://codeday.me/bug/20191120/2045761.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。