java saf,SAF框架介绍,SAF框架使用详解

c5ce2276f73cf73e9abfb523eb6f5399.png

由于工作的关系,经常要跟SAF框架打交道,网上查了之后才发现只有简短的几篇介绍,说是加拿大的人开发的,经常开发CRM系统,早在01年就开始开源了,功能很强大。

之前写过一篇,怎么学习一个新的PHP框架,下面说说SAF框架的大致流程吧。

一,在/inc/config.xml里面添加一个Action

Path就是浏览器index/XXX后面浏览的uri

Type就是对应的一个控制器

Forward用于实例化smarty后显示的指定模板

二,在/Action里面添加一个对应的XXXAction.php

格式如下:

class XXXAction extends Action {

var $forword = "";

function AdminfoAction (&$db, &$cgi, &$session,&$smarty) {

$this->Action(&$db, &$cgi, &$session,&$smarty);

}        function run () {

$db = $this->db;

$cgi = $this->cgi;

$session = $this->session;

$smarty = $this->smarty;

}

... ...

... ...

... ...

$this->forword="success";

$this->smarty = $smarty;

}

三,在/template/templates/添加之前forward里面path对应的模板即可。

看到上面的小例子是不是很简单呢?下面璞玉说下具体的细节:

一、前言

SAF框架(Simplified Application Framework)是一种基于mvc的php开发框架,它的基本框架包括了权限控制,类的引

入,数据库初始化,模板初始化等,并通过一个xml配置文件,方便的引入各种template及DB处理类,并且还有丰富的函数

类库可供扩展。本文只是对saf使用的一点点心得,与大家共享。

二、saf框架结构

1.Controller(控制器)

index文件 (代码只做基本结构描述,非运行版本):

// 导入配置文件

include_once ('inc/config.php');

header ('X-Powered-By...'):

// 初始化各种类的路径

include("lib/saf/loader/Loader.php");

$loader = new Loader (array (

'smarty'   => 'lib/smarty/libs',

'pear'    => 'lib/pear',

'saf'      => 'lib/saf',

'search'    => 'lib/Search',

'other'     => 'lib/other',

'action'   => 'Action'

));

// 导入各种需要的类

//import各种类

$loader->import("pear.DB.*");

$loader->import("saf.cgi.*");

$loader->import("saf.xml.*");

$loader->import("smarty.Smarty_class");

$loader->import("Action.*");

// 数据库连接初始化

$dsn = "...";

$db = new DB;

$mydb = $db->connect($dsn,false);

if($db->isError($mydb)) {

die($mydb->getMessage());

exit;

}

// 解析uri路径

$cgi = new CGI;

$extras = $cgi->parseUri ();

if (empty ($cgi->page)) {

$cgi->page = $extras[PAGE_LEVEL];

}

if (empty ($cgi->page)) {

$cgi->page = 'index';

}

// 初始化session

$session = new $UseSessionClass ($SessionCookieName, $cgi->username, $cgi->password,$mydb);

// 判断是否有权限访问

if(!$session->can_read($cgi->page,$session->usergroup)){

if(!isset($cgi->from)){

$from=$_SERVER["REQUEST_URI"];

}else{

$from=$cgi->from;

}

$referer=$_SERVER["HTTP_REFERER"];

if($from=="login") $from = "/";

header ("Location: /index/login?cannot=1&from=".$from."&referer=".$referer);

}

// 解析xml配置文件

$actionsd = new SloppyDOM ;

if ($actionxml = $actionsd->parseFromFile (MY_ACTION_XML) ) {

$actionnodes = $actionxml->query ("struts-config/action-mappings/action");

} else {

echo $actionsd->error;

}

foreach($actionnodes as $onenode){

$onenodeobj = $onenode->makeRefObj();

$onenodeatt = $onenodeobj->attrs;

if($onenodeatt['path'] == $cgi->page){

$actionstr = $onenodeatt['type'];

$forword = $onenode->children;

}

}

// Smarty模板初始化

$smarty = new Smarty;

// Action初始化

if($actionstr != ""){

$action = new $actionstr($mydb,$cgi,$session,$smarty);

}

else{

echo "没有对应的Action处理程序";

exit();

}

$action->run();

// 显示内容

foreach($forword as $oneforword){

$oneforwordobj = $oneforword->makeRefObj();

$oneforwordatt = $oneforwordobj->attrs;

if($oneforwordatt['name'] == $action->forword){

$action->smarty->display("".$oneforwordatt['path']."");

}

}

控制器index文件是saf框架开发的核心,每一个action文件都要经过这个index来action到不同的action处理类,

再根据XML配置文件forward到不到的模板。

2.Model(模式):

每一个Action类都使用如下类似的结构:

class XXXAction extends Action {  var $forword = "";

function AdminfoAction (&$db, &$cgi, &$session,&$smarty) {

$this->Action(&$db, &$cgi, &$session,&$smarty);

}

function run () {

$db = $this->db;

$cgi = $this->cgi;

$session = $this->session;

$smarty = $this->smarty;

}

... ...

... ...

... ...

$this->forword="success";

$this->smarty = $smarty;

}

3.View(视图):

templates 模板文件

4.XML配置文件:

my-config.xml

5.附加说明

①我们看到的用于做controller的是index文件而不是index.php,这个可以通过apache的配置文件force做指定。

②saf框架内置了三种模板:SimpleTemplate、Template和Transformation,较早的saf直接使用xml/xsl来做页面

的呈现,这里我把它改写成了使用smarty模板引擎。

③关于权限控制,基于每一个action(以及对应的每一个xml配置里的forward模板)我另有一个单独的文件来做用

户组,可访问页面进行添加、删除和授权。

④本文使用是的一种经过我改造的saf框架模型,所以代码均为示例代码,仅供参考。

三、小结

saf是一种高效的开发框架,它不同于PEAR,ADODB这样的类库,而是一套真正用于产品的开发框架,可以方便的使用

各种函数类库,各种数据库封装的接口,以及不同的模板引擎。可以方便的用于基于php的较大规模的应用部署,如cms

系统,crm系统等。本文只是我根据以往的实践针对使用saf框架的一个简单介绍以及一些改造的经验,希望能起到抛砖引

玉的作用,把它能用于我们实际的产品、项目开发中,完善它,改造它。希望能帮助我们从繁杂的项目代码中得到一点解

脱。

本人水平有限,对saf的理解也不够充分,难免有很多错误和不足,希望大家指正。

另:读过本文的人可能会发现,这种框架很类似于jsp中的mvc开发模式,但作为基于php的版本,它可能更为简洁,使

用起来更为高效、快速,更能体现做为php来进行web开发的特点,同时又在一定程度上弥补了php在做大规模应用部署时的

先天不足。另有一种类似的php开发框架php.MVC,被称为php的struts版,可能更接近java的那种模式,这里就不赘述了。

欢迎与我交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值