【问题标题】:mvc pattern, frameworks, implementationsmvc 模式、框架、实现
【发布时间】:2012-05-23 06:19:02
【问题描述】:

您好,我有几个关于 mvc 模式和框架的问题。 我知道 mvc 代表模型-视图-控制器,模型很胖,控制器很瘦,但我不太确定视图部分的一些细节。 比如说我有这个模型

<?php
class Menu_Model extends Models
{
    public function listMenuItems()
    {
       return $this->query('some_select');
    }
}

控制器

<?php
class Menu_Controller extends Controllers
{
   public function index()
   {
        $this->load('menu', 'Menu_Model');
        $this->view->assign('menuItems', $menu->listMenuItems());
        $this->view->add('menu.php');
   }
}

查看

<div class="menu">
<li>{echo_some_data_from_controller}</li>
</div>

我们说上面的代码是一个简单的菜单,现在快写..作为一个例子。通过 mvc ideea,它需要有一个模型、一个视图和一个好的控制器,但是我如何在我拥有的每个视图中实现这个菜单?让我们假设: head.php 文件,我在其中保留 html 的导入 css 开头的基本内容和网站的标题,以从 mysql 获取菜单的数据我需要调用模型,但在控制器和每个页面中调用模型有它自己的控制器,所以据我所知,到目前为止,对于每个控制器方法,我需要调用某个模型菜单、登录表单等...在每个页面上输出我需要获取数据或我该怎么做?

【问题讨论】:

  • 你使用特定的框架吗?
  • @ssx 它看起来像 Code Igniter
  • 实际上我使用的是TinyMVC,但这里是一个基于大多数框架如何处理数据的示例..:-)

标签: php mysql model-view-controller


【解决方案1】:

responsibility of a Controller is to handle User Input。如果您的菜单不需要任何用户输入,请将代码放入 View Helper,然后从那里获取模型数据。然后call that View Helper from the View。换句话说:那你就不需要控制器了。

另一种方法是提供某种机制,允许您在每次调用控制器时注册通用功能,例如something like Zend Frameworks's pre- and post-dispatch hooks。然后,您可以为这些钩子编写插件,以在每个请求上加载和注入某些模型数据。

【讨论】:

  • 等等基础知识什么不需要控制器我只写一个模型/插件..我直接在视图中调用它而不为它们编写某种控制器?在此处查看此代码/问题Link
  • @Bogdan 对不起,我不明白你刚才问了什么。你能改写一下吗?
  • 对于每个不需要用户输入的模型,比如表单,只在视图中输出数据我不需要控制器,我可以把它写成插件/模块/助手并在查看没有?
猜你喜欢
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 2013-09-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-09-30
  • 1970-01-01
相关资源
最近更新 更多