Joomla文档中文翻译 - MVC组件开发:基础 - 创建组件(2) 入口点

thumb-joomla-doc-viiiixJoomla始终使用一个单独的入口点,例如站点前台的index.php或管理后台的administrator/index.php。组件的调用是通过向URL或POST数据中追加option值来实现的对于我们的hello组件,URL应该是这样的:

index.php?option=com_hello&view=hello

这个URL会直接调用hello组件的入口点(entry point),即components/com_hello/hello.php文件。接下来我们看看这个入口点文件的代码;这是一个很典型的Joomla组件入口点文件:

<?php
/**
* @package Joomla.Tutorials
* @subpackage Components
* components/com_hello/hello.php
* @link http://docs.joomla.org/Developing_a_Model-View-Controller_Component_-_Part_1
* @license GNU/GPL
*/


// No direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Require the base controller

require_once( JPATH_COMPONENT.DS.'controller.php' );

// Require specific controller if requested
if($controller = JRequest::getVar('controller')) {
$path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
if (file_exists($path)) {
require_once $path;
} else {
$controller = '';
}
}

// Create the controller
$classname = 'HelloController'.$controller;
$controller = new $classname( );

// Perform the Request task
$controller->execute( JRequest::getVar( 'task' ) );

// Redirect if set by the controller
$controller->redirect();

第一行是常规的用来防止文件被直接访问的代码。

第二行代码用来请求组件的基本控制器;其中JPATH_COMPONENT是表示当前组件绝对路径的常量,在我们的范例中,它的值为“components/com_hello”。如果希望更明确的指定前台的site类组件或后台的administrator类组件,那么可以使用JPATH_COMPONENT_SITE或JPATH_COMPONENT_ADMINISTRATOR这两个常量;DS表示路径中的“/”或“\”,它由系统框架自行判断,无需开发者担心不同操作系统中的不同状况。

加载了基本控制器之后,代码会检查是否需要调用特定的控制器。在我们的范例中,基本控制器是唯一的控制器,不过我们还是将判断代码保留下来,在将来也许会用到。其中JRequest:getVar()用来获取URL或POST数据中的变量,例如,对于index.php?option=com_hello&controller=controller_name这个URL,我们可以使用JRequest::getVar('controller')来获取控制器的名称controller_name。

控制器被创建之后,我们要使用它来执行任务(task),对应的URL即为index.php?option=com_hello&task=sometask;如果没有指定task,那么URL中task的默认值为“display”。其他的task名称还有save,edit,new等。

控制器还会决定是否需要跳转页面,通常在执行了“save”这样的任务之后会执行跳转。

我们可以看到,入口点文件实际上将控制权交给了控制器,后者会按照请求执行相应的任务。

另外需要注意的是,上面的代码中,我们并没有关闭PHP标签。这是Joomla 1.5以来对于PHP文件的一种惯常的实践方式,用来避免在代码输出中的生成没必要的空白。

译者:Viiiix7210

如需转载,请注明官方英文文档及本人译文的出处,谢谢。查看官方英文文档: Developing a Model-View-Controller Component - Part 1

收藏与分享

添加评论


Security code
换一张图