控制器布局 php,PhalconPHP视图/布局/控制器

我是Phalcon的新手.我创建了一个PhalconPHP应用程序,该应用程序从数据库中获取菜单元素.我使用布局来创建在index.volt中调用的菜单,但是布局直接调用了模型函数.

我认为这不是最佳解决方案,也许我应该在模型和布局之间使用控制器.

布局:

$menus = Menus::find();

foreach ($menus as $menu) {

echo "

".$menu->name."";

}

指数:

Phalcon PHP Framework

<?php $this->partial("layouts/menus") ?>

{{ content() }}

我真的很感激,有人告诉我什么是最好的解决方案.

解决方法:

如果生成菜单,则可能正在寻找扩展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中的:

foreach ($menus as $menu) {

echo "

".$menu->name."";

}

应该足够了.在Volt中看起来更好:

{% for menu in menus %}

{{ menu.name }}

{% 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值