|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我的这套线路可能跟许多学习PHP的爱好者不谋而合,这也算是一个循序渐进的学习过程,不过新手不要看到上面的概括就以为学习蛮简单的,默默在此不得不对您稍微泼一下冷水,任何东西其实都不简单。php5 原文:http://www.onlamp.com/pub/a/php/2004/12/09/three_tier.html
Three-Tier Development with PHP 5
by Luis Yordano Cruz
12/09/2004
此文演示了PHP三层开辟的壮大功效,PEAR::DB_DataObject用于营业逻辑,Smarty用于显示逻辑,这里假定你熟
悉了HTML,Smarty,PEAR::DB_DataObject,Mysql和PHP5.假如你需求增补常识,上面的文章注释了一些道理:
用PHP DataObject简化营业逻辑
Smarty简介:一个PHP模板引擎
PHP可伸缩性:Myth
你应当已装置和设置装备摆设好了Apache,MySQL,和PHP5(或IIS,MySQL5和PHP)
PEAR::DB_DataObject
PEAR::DB_DataObject 是一个用户数据库会见的笼统API.它是一个基于PEAR::DB的SQL构建器和数据建模层.它
把数据库表映照到PHP类而且供应像SELECT,INSERT,UPDATE,和DELETE如许的公共SQL函数.这使即便不了
解SQL的开辟者也能够写出好的数据库会见代码,而且勉励演示逻辑和营业逻辑有一个明晰的分别.
(DB_OO已挪动到的PEAR,如今是DB_DataObject,假如你有老的代码要更新,检查关于从老的db_oo代码更新到
DB_DataObjects的正文).
相干浏览
Upgrading to PHP 5
By Adam Trachtenberg
Table of Contents
Index
Sample Chapter
Read Online--Safari Search this book on Safari:
Only This Book All of Safari
Code Fragments only
DataObject performs two tasks. First, it builds SQL statements based on the object's variables and the builder
methods. Second, it acts as a datastore for a table row. There's a core class, which you extend for each of
your tables so that you put the data logic inside the data classes. There's also an included Generator to make
your configuration files and your base classes.
DataObject 履行两个义务.第一,它构建基于对象变量的SQL语句和构建器办法.第二,它作为数据库表的数据存
储.这里有个中心类,关于每一个表承继它,以使你把数据逻辑放入数据类中.这里还包含一个生成器,
DataObject 极大的简化了数据库会见代码,它使开辟大型的,数据驱动的站点加倍轻易.
At present, Alan Knowles, the lead developer of PEAR::DB_DataObject, is working on a new project called DBDO,
a C implementation of the PEAR package DB_DataObjects, based on libgda. His goal is to create the next
generation of PEAR::DB_DataObjects.
SMARTY
Smarty是一个从web页演示平分离内容的PHP模板引擎.它利用GPL允许.
Large projects commonly separate the role of the graphic designer from that of the programmer. However,
programming in PHP has the tendency to combine those two roles in a person and inside the code. This can bring
difficulties when it comes time to change some part of the page's design. If the page mixes content and
presentation, the developer has to crawl through the program to find the presentation. Smarty helps to solve
this problem.
Combining the Two
The first thing to do when starting this project is to create a workspace in which to store the project's code.
Then it's time to configure PEAR::DB_DataObject to connect to the MySQL database MySQL (name: example),
map the database tables to PHP classes, and then configure Smarty for the presentation tier for the user. Here
are those steps in more detail:
创立任务情况
创立一个叫做dataobjects的目次.
从号令行装置PEAR::DB_DataObject,键入:
>pear install Date
>pear install DB_DataObject
>pear list
INSTALLED PACKAGES:
===================
PACKAGE VERSION STATE
Archive_Tar 1.2 stable
Console_Getopt 1.2 stable
DB 1.6.5 stable
DB_DataObject 1.7.1 stable *(Goal)
Date 1.4.3 stable
Mail 1.1.3 stable
Net_SMTP 1.2.6 stable
Net_Socket 1.0.2 stable
PEAR 1.3.1 stable
PHPUnit 1.0.1 stable
XML_Parser 1.2.0 stable
XML_RPC 1.1.0 stable
装置和设置装备摆设Smarty
从下载入手下手,(我利用2.6.5版的Smarty)解压到你本人的目次.从它的libs目次中把Smarty.class.php,
Smarty_Compiler.class.php, Config_File.class.php, and debug.tpl文件复制到dataobjects目次中.
还要复制core和plugins目次和个中一切的内容.创立几个新的目次,定名为templates, templates_c, configs,
和cache.
最初dataobjects目次包括:
|---- cache
|---- configs
|---- core
|---- plugins
|---- templates
|---- templates_c
11/10/2004 11:17 a.m. <DIR> .
11/10/2004 11:17 a.m. <DIR> ..
11/10/2004 11:17 a.m. <DIR> cache
11/10/2004 11:17 a.m. <DIR> configs
11/10/2004 11:17 a.m. <DIR> core
11/10/2004 11:17 a.m. <DIR> plugins
11/10/2004 11:17 a.m. <DIR> templates
11/10/2004 11:17 a.m. <DIR> templates_c
07/09/2004 09:48 a.m. 13,105 Config_File.class.php
16/04/2004 03:03 a.m. 5,117 debug.tpl
10/09/2004 02:15 p.m. 65,350 Smarty.class.php
10/09/2004 07:14 p.m. 90,924 Smarty_Compiler.class.php
4 archivos 174,496 bytes
8 dirs 6,699,454,464 bytes libres
创立数据库
创立一个名为example的数据库,它包括一个名为User的表,不用忧虑形式,稍后咱们会创立.
设置装备摆设PEAR::DB_DataObject
要构建数据对象,创立上面的文件
configDB.php
<?php
require_once 'DB/DataObject.php';
$config = parse_ini_file('example.ini',TRUE);
foreach($config as $class=>$values) {
$options = &PEAR::getStaticProperty($class,'options');
$options = $values;
}
?>
此剧本基于example设置装备摆设文件中的值创立一个到数据库的毗连,显示以下.
example.ini
[DB_DataObject]
database = mysql://root:@localhost/example
schema_location = /dataobjects/schema/
class_location = /dataobjects/
require_prefix = /dataobjects/
class_prefix = DataObjects_
extends_location = DB/DataObject.php
extends = DB_DataObject
主动构建数据库形式
包括两个进程,构建数据库的对象-关系映照,和从example数据库user表中主动创立一个类.在表中的一切字段
名将成为类成员变量.
创立恰当的形式:
C:\PHP\PEAR\DB\DataObject>C:\PHP\php.exe createTables.php \
C:\dataobjects\example.ini
这将生成User.php文件:
<?php
/**
* Table Definition for user
* www.knowsky.com
*/
require_once 'DB/DataObject.php';
class DataObjects_User extends DB_DataObject
{
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
var $__table = 'user'; // table name
var $user_Id; // int(11) not_null primary_key auto_increment
var $first_Name; // string(30) not_null
var $last_Name; // string(40) not_null
var $email; // string(100) not_null
/* Static get */
function staticGet($k,$v=NULL) {
return DB_DataObject::staticGet('DataObjects_User',$k,$v);
}
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
}
?>
它还会为user表形式生成example.ini设置装备摆设文件:
[user]
user_Id = 129
first_Name = 130
last_Name = 130
email = 130
[user__keys]
user_Id = N
Smarty files
It's time to create several files for Smarty:
Smarty文件
如今是创立几个Smarty文件的时分了:
include.php
1 <?
2 require('Smarty.class.php');
3 $smarty = new Smarty;
4 $smarty->template_dir = 'templates/';
5 $smarty->compile_dir = 'templates_c/';
6 $smarty->config_dir = 'configs/';
7 $smarty->cache_dir = 'cache/';
?>
此剧本实例化了一个新Smarty对象.设置Smarty属性.
index.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','ACCESS MySQL DATABASE IN THREE TIERS WITH PHP');
4 $smarty->assign('HEADER','WHAT WISH DO ?');
5 $smarty->display('index.tpl');
?>
给Smarty模板分派变量.
insert.php
1 <?
2 require("include.php");
3 $smarty->assign('TITLE','INSERT DATA');
4 $smarty->assign('HEADER','Insert Data');
5 $smarty->assign('data1','First Name');
6 $smarty->assign('data2','Last Name');
7 $smarty->assign('data3','email');
8 $smarty->display('insert.tpl');
?>
添加将在insert.tpl 利用的变量.挪用模板insert.tpl .
save.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 $user = DB_DataObject::factory('user');
5 $user->first_Name = $x;
6 $user->last_Name = $y;
7 $user->email = $z;
8 $user_Id = $user->insert();
9 $user->update();
10 echo "<script>location.href='index.php'</script>";
11 ?>
This script saves data by using a PEAR::DataObject for the user table. Line 2 loads the class DataObject, and
line 3 calls configdb.php to connect to the database. Line 4 creates an instance of a user object (see User.php).
Lines 5 through 7 pass the variables collected from the form in insert.tpl ($x, $y, and $z) in order to save the
data in the database. The primary key of the table is an autoincrement column, so it doesn't need a value there.
Line 8 inserts the object, and line 9 carries out an update.
view.php
1 <?
2 require_once('DB/DataObject.php');
3 require('configDB.php');
4 require("include.php");
5 $user = DB_DataObject::factory('user');
6 $user->find();
7 while ($user->fetch()) {
8 $smarty->append('users', array(
'ID' => $user->user_Id,
'FIRSTNAME' => $user->first_Name,
'LASTNAME' => $user->last_Name,
'EMAIL' => $user->email,
));
}
9 $smarty->assign('TITLE','List Users');
10 $smarty->assign('HEADER','List User');
11 $smarty->assign('data0','User_Id');
12 $smarty->assign('data1','First Name');
13 $smarty->assign('data2','Last Name');
14 $smarty->assign('data3','email');
15 $smarty->display('view.tpl');
16 ?>
此剧本显示一切存储在user表中的数据.它加载PEAR::DataObject 和include.php文件(给smarty模板分派变量).
第5行创立一个user对象的工场.第6行履行find()办法.SELECT * FROM user从数据库中检索出了数据,通
过fetch()办法为模板保留数据,一次前往一笔记录.
9 到14行是分派其他的变量给Smarty.
这些文件都应该放在dataobjects目次中.
关于模板,这里有index.tpl,list.tpl,和save.tpl.这里是他们的代码:
index.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 </head>
6 <table align="center">
7 <tr>
8 <td>
9 <b>{$HEADER}</b>
10 </td>
11 </tr>
12 </table>
13 <table width="250" border="1" align="center" >
14 <tr>
16 <td align="center">
17 <input type="button" name="insert" value="Insert"
>
18 </td>
19 </tr>
20 <tr>
21 <td align="center">
22 <input type="button" name="view" value="View"
>
23 </td>
24 </tr>
25 </table>
26 </body>
27 </html>
站点主页,它在的3行和第9行分离显示$TITLE 和$HEADER,这些变量值是从index.php传递过去的.
这个剧本在web阅读器上生成两个按钮,Insert和View,他们有响应的行动.假如用户点击Insert,体系将调
用Insert.php.假如用户点击View,那末view.php将被挪用
insert.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 </head>
6 <body>
7 <form name="form1" action="save.php" method="post">
8 <table width="300" border="1" align="center" >
9 <tr>
10 <td align="center">
11 <b>{$HEADER}</b>
12 </td>
13 </tr>
14 <tr>
15 <td>
16 {$data1}
17 <input type="text" name="x">
18 </td>
19 </tr>
20 <tr>
21 <td>
22 {$data2}
23 <input type="text" name="y">
24 </td>
25 </tr>
26 <tr>
27 <td>
28 {$data3}
29 <input type="text" name="z">
30 </td>
31 </tr>
32 <tr>
33 <td align="center">
34 <input type="submit" name="Submit" value="Add">
35 <input type="button" name="Reset" value="Return/Cancel"
>
36 </td>
37 </tr>
38 </table>
39 </form>
40 </body>
41 </html>
这个模板有一个表单和两个按钮,Add 和Return/Cancel.
用户输出数据,first name,last name 和电子邮件字段.insert.php希冀在名为x,y,z的变量中吸收这些信息,用户点
击Add按钮将运转save.php.假如用户点击Return/Cancel,将会履行index.php.
view.tpl
1 <html>
2 <head>
3 <title>{$TITLE}</title>
4 </head>
5 <body>
6 <table align="center">
7 <tr>
8 <td align="center">
9 <b>{$HEADER}</b>
10 </td>
11 </tr>
12 </table>
13 <table width="500" border="1" align="center">
14 <tr>
16 <td align="center">
17 <b>{$data0}</b>
18 </td>
19 <td align="center">
20 <b>{$data1}</b>
21 </td>
22 <td align="center">
23 <b>{$data2}</b>
24 </td>
25 <td align="center">
26 <b>{$data3}</b>
27 </td>
28 </tr>
29 {section name=display loop=$users}
30 <tr>
31 <td>
32 {$users[display].ID}
33 </td>
34 <td>
35 {$users[display].FIRSTNAME}
36 </td>
37 <td>
38 {$users[display].LASTNAME}
39 </td>
40 <td>
41 {$users[display].EMAIL}
42 </td>
43 </tr>
44 {/section}
45 <br>
46 </table>
47 <br>
48 <table align="center">
49 <tr>
50 <td align="center">
51 <input name="vol" type="button" value="Return"
>
52 </td>
53 </tr>
54 </table>
55 </body>
56 </html>
这个模板显示一切存储在example数据库中的一切数据.
最初,Return按钮把用户带回到主页.
一切的这些(*.tpl)文件必需放在templates目次下.
不懂的问题有很多高手帮你解决。但不要认为你是新手,就不能帮助别人,比如今天你学会了怎样安装PHP,明天还可能有朋友会问这个问题,你就可以给他解答,不要认为这是浪费时间,忙别人其实就是帮助自己。 |
|