PHP MVC一般问题

PHP MVC一般问题,php,model-view-controller,frameworks,doctrine,Php,Model View Controller,Frameworks,Doctrine,我正在为一个特定的PHP应用程序构建一个小型的MVC框架——使用条令作为ORM。 我想知道管理前端菜单的最佳实践是什么 我的应用程序有3个菜单(水平菜单、左菜单、底部/页脚菜单),可由站点管理员编辑(菜单存储在嵌套集中) 调用和呈现菜单的代码应位于何处?每个控制器应能够根据其要求调用菜单的创建(例如,对于控制器,用户不希望显示左侧菜单) 在菜单模型中定位此函数是不合适的,我想…控制器应该调用代码来呈现菜单,并在需要时使用模型中数据库中的任何数据。然后将结果发送到您的视图 这是一个小故障 看法

我正在为一个特定的PHP应用程序构建一个小型的MVC框架——使用条令作为ORM。 我想知道管理前端菜单的最佳实践是什么

我的应用程序有3个菜单(水平菜单、左菜单、底部/页脚菜单),可由站点管理员编辑(菜单存储在嵌套集中)

调用和呈现菜单的代码应位于何处?每个控制器应能够根据其要求调用菜单的创建(例如,对于控制器,用户不希望显示左侧菜单)


在菜单模型中定位此函数是不合适的,我想…

控制器应该调用代码来呈现菜单,并在需要时使用模型中数据库中的任何数据。然后将结果发送到您的视图

这是一个小故障

看法
  • 处理网页的内容
  • HTML和PHP以模板形式的组合
  • 输入和表示
模型
  • 包含应用程序的业务逻辑
  • 数据库中的所有数据都将驻留在其中
控制器
  • 从适当的模型接收输入并请求响应

我目前在我的MVC框架中实现了多层菜单(特别是Symfony,但此模式应该转换),方法是在一个单独的include(Symfony术语中的组件)中设置呈现,该包含递归调用自身来呈现每一层。include的控制器从模型请求当前层,然后将其传递给视图。include视图呈现每个返回的元素,并再次调用include以打印所有子元素(如果可用),传入当前元素的ID以查询模型中的父值

至于调节菜单的显示,我会将其保留在您的顶层视图中,因为它听起来像是特定于视图的

型号

在这里,您应该熟悉Doctrine的findByX方法来查询当前层的项。我的模式中的字段名为
parent
,因此我将使用
findByParent

包括客户的控制器

$items = Doctrine::getTable('TopMenuItems')->findByParent( isset($parent) ? $parent : null) ) // null for initial call to grab top-tier elements, recursion should pass in new parent for children
包含用户视图

<?php foreach($items as $item) : ?>
  // echo HTML element for nav item
  <?php $parent = $item['parent']; include('top_menu.php'); // call nav again to print this item's children ?>
<?php endforeach; ?>
<?php if($user->wantsTopMenu()) : ?>
<?php include('top_menu.php'); ?>
<?php endif; ?>

//导航项的echo HTML元素

例如,视图将调用相关菜单HTML模板?是的,视图将显示HTML模板。