Joomla-book/1.2-Joomla! 中关于MVC的解释

Joomla! 中关于MVC的解释

Introduction to MVC

MVC is a software design pattern that can be used to organize code in such a way that the business logic and data presentation are seperated. The premise behind this approach is that if the business logic is grouped into one section, then the interface and user interaction that surrounds the data can be revised and customized without having to reprogram the business logic. MVC was originally developed to map the traditional input, processing, output roles into a logical GUI architecture.

Model

The model is the part of the component that encapsulates the application's data. It will often provide routines to manage and manipulate this data in a meaningful way in addition to routines that retrieve the data from the model. In general, the underlying data access technique should be encapsulated in the model. In this way, if an application is to be moved from a system that utilizes a flat file to store its information to a system that uses a database, the model is the only element that needs to be changed, not the view or the controller.

View

The view is the part of the component that is used to render the data from the model in a manner that is suitable for interaction. For a web-based application, the view would generally be an HTML page that is returned to the user. The view pulls data from the model (which is passed to it from the controller) and feeds the data into a template which is populated and presented to the user. The view does not cause the data to be modified in any way, it only displays the data received from the model.

Controller

The controller is responsible for responding to user actions. In the case of a web application, a user action is generally a page request. The controller will determine what request is being made by the user and respond appropriately by triggering the model to manipulate the data appropriately and passing the model into the view. The controller does not display the data in the model, it only triggers methods in the model which modify the data, and then pass the model into the view which displays the data.

Joomla! Component Framework Explained

在 Joomla! Framework 中,models 负责管理数据。每一个 model 中一个必须写的 function 就是 get function,它用来返回数据给请求者。举个例子,这个请求者就是下面的 HelloWorldViewHelloWorld 视图(view)。默认情况下,命名为 HelloWorldModelHelloWorld 的、位于 site/models/helloworld.php的 model 文件是这个视图的主要相关 model。
所以,这里我们有一些命名规范要记住,这些规范是魔法生效的前提,便于我们理解类与类之间是如何调用的。
躺在 site/views/helloworld/view.html.php 中的 HelloWorldViewHelloWorld 类会利用到躺在site/models/helloworld.php中的 HelloWorldModelHelloWorld类。

再举个例子,我们想使用一个叫fluffy的视图,你必须有:

  1. 躺在 site/views/fluffy/view.html.php中的HelloWorldViewFluffy
  2. 躺在 site/models/fluffy.php中的HelloWorldModelFluffy
  3. Note: the actual screen of the view: site/views/fluffy/tmpl/default.php is required as well to make this example work.

少了上述任一规范,都会导致错误出现空白页。

如何访问Joomla!组件

访问首页

用户访问前端: www.yoursitename.com/index.php,可以通过nginx配置隐藏index.php;

管理员访问后台:www.yoursitename.com/administrator/index.php

访问某组件

用户访问:www.yoursitename.com/index.php?option=com_<component_name>

管理员访问后台:www.yoursitename.com/administrator/index.php?option=com_<component_name>

举个 HelloWorld 组件的例子:

www.myjoomla.com/index.php?option=com_helloworld

基本的MVC目录结构

Components 都放在一个指定的目录当中,即 components文件夹,如: /Users/Workspace/Joomla/components/
那么 HelloWorld 组件就是放在 /Users/Workspace/Joomla/components/com_helloworld

一个基本的组件包括以下文件:

每一个文件夹下都会放一个空白内容的 index.html,这是出于安全考虑,主要是防止索引文件夹。

  1. 一个出于安全考虑的空白内容文件:index.html
  2. 一个代表 controller 自己的 php 文件:controller.php
  3. 一个加载 controller 类的 php 文件:<component_name>.php
  4. 一个代表 model 自己的 php 文件 models/<component_name>.php
  5. 另一个空白文件:models/index.html
  6. 一个包含默认视图的 php 文件:views/<component_name>/tmpl/default.php
  7. A xml file for adding a menu item type:views/<component_name>/tmpl/default.xml
  8. 各个文件夹下的 index.html
  9. 一个用来显示视图的 php 文件:views/<component_name>/view.html.php

以上只是基本的文件,你可以根据需要任意添加,具体看看 joomla! 自带的那些 components 就知道啦。

com_search 举例:

com_search
├── controller.php
├── models
│   └── search.php
├── router.php
├── search.php
└── views
    └── search
        ├── metadata.xml
        ├── tmpl
        │   ├── default.php
        │   ├── default.xml
        │   ├── default_error.php
        │   ├── default_form.php
        │   └── default_results.php
        ├── view.html.php
        └── view.opensearch.php

JEXEC 常量

每一个 php 文件开头都须放置一串这样的代码:

<?php
defined('_JEXEC') or die;

防止直接访问 php 文件时可能出现的报错信息。

首发Github

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 不想说告别 相思成蹉跎 我愿拥抱这孤独 驻守在黑夜 不想说告别 相思是首歌 我愿背起木吉他 慢慢来诉说 歌声迷路在...
    雷声狂阅读 323评论 0 3
  • 1 自私,嚣张,任性,大多数人是这么评论萱萱的。 军训时襖热难当,我们简直是闷在蒸笼里的黑土豆。靠着假病例逃过军训...
    爱恨的潮汐阅读 903评论 0 0