编程语言
首页 > 编程语言> > PhalconPHP视图/布局/控制器

PhalconPHP视图/布局/控制器

作者:互联网

我是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