joomla mvc架构, 原理

component基本结构与访问方式

如访问:http://example.com/index.php?option=com_helloworld

Joomla将定位到:/components/com_helloworld,并且加载里面的helloworld.php

helloworld.php的工作就是加载相应的controller,继而调用相应的view

含view, task的访问方式

如访问:http://domain.com/index.php?option=com_helloworld&view=helloworld&task=display&layout=default

joomla将定位到:看下面标红的,其实是先定位到helloworld.php,然后调实例化HelloWorldController,并调用指定的task方法,此处为display,在display里再去实例化HelloWorldViewHelloWorld类,继而调用其display方法。所以此处可以说直接定位到components/com_helloworld/views/helloworld/view.html.php

注意这里的view和task不是必须的,但按以下默认规则:

task    默认值:display

通过HelloWorldController里display方法调用到view.html.php里display方法.

view   默认值:component‘s name

此处component名称为helloworld,故默认的view helloworld将被调用

layout 默认值:default

layout指调用相应view下哪个模板,此处为components/com_helloworld/views/helloworld/tmpl/default.php

如layout指定值,则调用相应的<layout>.php

注意:要使用layout参数,在view类里必须调用 ‘parent::display($tpl);‘此处$tpl极值

上图说明:

HelloWorldController为空类,但其继承了JControllerLegacy,其父类里有display方法,里面将实例化给定view,并调用view下display方法,见下

?


1

$view->display();

相应view的获取方式为:components/com_helloworld/views/helloworld/view.html.php

default.php里$this指HelloWorldViewHelloWorld对象,故$this->msg可直接使用

返回json,xml等格式

joomla还有个format参数,默认值是html,将调用view.html.php来输出,如想返回json,xml等,则增加以下php

举个返回xml的例子 view.xml.php:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

<?php

// No direct access to this file

defined(‘_JEXEC‘or die(‘Restricted access‘);

 

// import Joomla view libraryjimport(‘joomla.application.component.view‘);

 

/**

 * XML View class for the HelloWorld Component

 */

class HelloWorldViewHelloWorld extends JViewLegacy

{

        // Overwriting JView display method

        function display($tpl = null) 

        {

            echo "<?xml version=‘1.0‘ encoding=‘UTF-8‘?>

<article>

  <title>How to create a Joomla Component</title>

  <alias>create-component</alias>

</article>";

        }

}

则访问

http://example.com/index.php?option=com_helloworld&format=xml

返回

component里model访问方式

MVC结构还少了M,此处给出解释

model定义在components/com_helloworld/models文件夹里,名称为helloworld.php

model类名为HelloWorldModelHelloWorld,里面方法名都是setget打头的。

在view里通过$this->get(‘组件名‘)调用相应的model下的代码,见下

可见,调用model的方式

view view调用 $this->get(‘Msg‘);
model ...接下来model里对应的function将会被调用 getMsg()

总结下:

以下绿色是固定的,红色是变化的

<Name>表示组件名

controller

controller的命名方式:<Name>Controller

?


1

class <Name>Controller extends JControllerLegacy{}

controller的调用方式:

?


1

2

3

$controller = JControllerLegacy::getInstance(‘<Name>‘);

$controller->execute(JFactory::getApplication()->input->getCmd(‘task‘));

$controller->redirect();

view

view不指定的话即为组件名,即为<Name>

view的命名方式:<Name>View<Viewname>

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

class <Name>View<Viewname> extends JViewLegacy{

  function display($tpl=null)

  {

    // Prepare the data

    $data1 = ....

    $data2 = ....

    $moredata[] = array....

 

    // Inject the data

    $this->variablename = $data1;

    $this->variablename2 = $data2;

    $this->variablename3 = $moredata;

 

    // Call the layout template. If no tpl value is set Joomla! will look for a default.php file

    $tpl ‘myTemplate‘;

    parent::display($tpl); //此处指定$tpl的话,则调用相应的tmpl下<$tpl>.php,默认值为default

  }}

model

model的命名方式:<Name>Model<Modelname>

?


1

class <Name>Model<Viewname> extends JModelLegacy{}

所有get开头的函数在view里的调用方式为$this->get(‘xxx‘);

时间: 2024-12-15 02:50:43

joomla mvc架构, 原理的相关文章

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器、过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验。

熟悉基于JSP和Servlet的Java Web开发,对Servlet和JSP的工作原理和生命周期有深入了解,熟练的使用JSTL和EL编写无脚本动态页面,有使用监听器.过滤器等Web组件以及MVC架构模式进行Java Web项目开发的经验. 1.说一说Servlet生命周期(非常重要) Servlet生命周期包括三部分: 初始化:Web容器加载servlet,调用init()方法 只执行一次 处理请求:当请求到达时,运行其service()方法.service()自动调用与请求相对应的doXXX

MVC架构简介及其测试策略

最近在WEB端测试工作中陷入了瓶颈,单纯的手动功能测试在没有成熟的代码规范之前还是很容易坑的,WEB自动化测试一时半会还没有什么进展,所以决定先学习一下网站用的MVC架构,跟着教程写了一个小网站,大概也找到了WEB测试工作的几个突破口. MVC即为按照分层解耦的思想,将网站结构分成了Model(模型)-View(视图)-Controller(控制器)三层架构,三层架构的职责如下: Model层:是应用程序中用于处理应用程序数据逻辑的部分,通常模型对象负责在数据库中存取数据:简单来说,就是在Mod

【JAVA】基于MVC架构Java技术荟萃案例演练

基于JAVA-MVC技术的顾客管理项目案例总结 作者 白宁超 2016年6月9日22:47:08 阅读前瞻:本文源于对javaweb相关技术和资料汇总,涉及大量javaweb基础技术诸如:Servlet运行原理.Get/Post请求的区别.jsp的基本原理和运行框架.jsp的9大隐含对象的使用.MVC开发模式的使用.构建封装自己dao代码库.以及基于MVC的增删改查操作等:小结最后还有面向接口编程的多数据源配置与存储,以及工厂模式的使用.除此之外,后续文章会对cookie.session.Jav

[JavaWeb基础] 018.Struts2 MVC架构之ModelDriven

用过struts1的人接触struts2的时候,通常会产生一个疑惑,明明struts1已经把action的form分开了,为什么struts2确把模型放在action中定义.其实这个方式只是想让action更加直观,但是如果表单数据过多的话,action类就会出现过于冗长,所以struts2的ModelDriven就要出来解决问题了.下面讲讲ModelDriven的机制 1.工作原理 ModelDriven的机制背后就是ValueStack.界面可以通过直接指定对象的属性名就能给对象进行赋值.

【转】.NET/ASP.NET Routing路由(深入解析路由系统架构原理)

阅读目录: 1.开篇介绍 2.ASP.NET Routing 路由对象模型的位置 3.ASP.NET Routing 路由对象模型的入口 4.ASP.NET Routing 路由对象模型的内部结构 4.1]UrlRoutingModule 对象内部结构 4.2]RouteBase.Route.RouteCollection.RouteTable 路由核心对象模型 4.3]RouteValueDictionary.RouteData.RequestContext 路由数据对象模型 4.4]IRou

Extjs MVC架构 (官方文档翻译)【带源码】

原文地址:http://docs.sencha.com/extjs/4.2.5/#!/guide/application_architecture [翻译 by 明明如月 QQ 605283073  源码在文章最后] 大型客户端应用经常比较难写.难组织.难维护. 当你添加更多的函数(功能)和开发人员时它们容易失去控制. Ext JS 4 带来了新的应用架构,不仅能够帮助组织你的代码同时也能够减少代码量. 我们的应用架构遵循MVC模式.有很多MVC架构,它们之间也彼此有少许区别. 这里我们定义我们

浅谈MVC架构—你到底有什么本事

一.什么是MVC 1.概念 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.MVC被独特的发展起来用于映射传统的输入.处理和输出功能在一个逻辑的图形化用户界面的结构中. 小编点睛:MVC就是类似三层的一种架构,主要还是采用封装(分层)的思想,来降低耦合

运用 Ext JS 4 的 MVC 架构

http://www.open-open.com/lib/view/open1350386395227.html http://www.ibm.com/developerworks/cn/web/1210_wangzh_extjsmvc/index.html Ext JS 4 简介 Ext JS 4 目前是 Sencha 的产品,4.x 的正式版本号是 4.0.7.Ext JS 4 提供商业版本,但如果您的项目是开源的,则可以免费使用 Ext JS 4.Ext JS 的论坛目前非常活跃:Ext

spring mvc 工作原理

SpringMVC框架介绍 1) Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面. Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 Spring Web 框架还是 Struts 这样的 Web 框架.通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术.Velocity.Til