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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容

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