麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 語言 > PHP > 正文

用PHP5進(jìn)行三層開發(fā)

2024-09-04 11:50:10
字體:
供稿:網(wǎng)友

此文演示了PHP三層開發(fā)的強(qiáng)大功能,PEAR::DB_DataObject用于業(yè)務(wù)邏輯,Smarty用于顯示邏輯,這里假設(shè)你熟

悉了HTML,Smarty,PEAR::DB_DataObject,Mysql和PHP5.如果你需要補(bǔ)充知識,下面的文章解釋了一些原理:

用PHP DataObject簡化業(yè)務(wù)邏輯
Smarty簡介:一個PHP模板引擎
PHP可伸縮性:Myth

你應(yīng)該已安裝和配置好了Apache,MySQL,和PHP5(或者IIS,MySQL5和PHP)

PEAR::DB_DataObject
PEAR::DB_DataObject 是一個用戶數(shù)據(jù)庫訪問的抽象API.它是一個基于PEAR::DB的SQL構(gòu)建器和數(shù)據(jù)建模層.它

把數(shù)據(jù)庫表映射到PHP類并且提供像SELECT,INSERT,UPDATE,和DELETE這樣的公共SQL函數(shù).這使即使不了

解SQL的開發(fā)者也可以寫出好的數(shù)據(jù)庫訪問代碼,并且鼓勵演示邏輯和業(yè)務(wù)邏輯有一個清晰的分離.

(DB_OO已經(jīng)移動到的PEAR,現(xiàn)在是DB_DataObject,如果你有老的代碼要更新,查看關(guān)于從老的db_oo代碼更新到

DB_DataObjects的注釋).

相關(guān)閱讀
 
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 執(zhí)行兩個任務(wù).第一,它構(gòu)建基于對象變量的SQL語句和構(gòu)建器方法.第二,它作為數(shù)據(jù)庫表的數(shù)據(jù)存

儲.這里有個核心類,對于每個表繼承它,以使你把數(shù)據(jù)邏輯放入數(shù)據(jù)類中.這里還包括一個生成器,


DataObject 極大的簡化了數(shù)據(jù)庫訪問代碼,它使開發(fā)大型的,數(shù)據(jù)驅(qū)動的站點更加容易.

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頁演示中分離內(nèi)容的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:


創(chuàng)建工作環(huán)境

創(chuàng)建一個叫做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文件復(fù)制到dataobjects目錄中.


還要復(fù)制core和plugins目錄和其中所有的內(nèi)容.創(chuàng)建幾個新的目錄,命名為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


創(chuàng)建數(shù)據(jù)庫
創(chuàng)建一個名為example的數(shù)據(jù)庫,它包含一個名為User的表,不必?fù)?dān)心模式,稍后我們會創(chuàng)建.


配置PEAR::DB_DataObject
要構(gòu)建數(shù)據(jù)對象,創(chuàng)建下面的文件

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配置文件中的值創(chuàng)建一個到數(shù)據(jù)庫的連接,顯示如下.

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


自動構(gòu)建數(shù)據(jù)庫模式

包含兩個過程,構(gòu)建數(shù)據(jù)庫的對象-關(guān)系映射,和從example數(shù)據(jù)庫user表中自動創(chuàng)建一個類.在表中的所有字段

名將成為類成員變量.


創(chuàng)建適當(dāng)?shù)哪J?

C:PHPPEARDBDataObject>C:PHPphp.exe createTables.php
 C:dataobjectsexample.ini


這將生成User.php文件:

<?php
/**
 * Table Definition for user
 * www.companysz.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文件
現(xiàn)在是創(chuàng)建幾個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對象.設(shè)置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 使用的變量.調(diào)用模板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表中的數(shù)據(jù).它加載PEAR::DataObject 和include.php文件(給smarty模板分配變量).
第5行創(chuàng)建一個user對象的工廠.第6行執(zhí)行find()方法.SELECT * FROM user從數(shù)據(jù)庫中檢索出了數(shù)據(jù),通

過fetch()方法為模板保存數(shù)據(jù),一次返回一條記錄.

9 到14行是分配其他的變量給Smarty.


這些文件都應(yīng)當(dāng)放在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"   
           onclick="javascript:location.href='insert.php';">
18    </td>
19   </tr>
20   <tr>
21     <td align="center">
22      <input type="button" name="view" value="View"
          onclick="javascript:location.href='view.php';">
23   </td>
24   </tr>
25  </table>
26  </body>
27 </html>


站點主頁,它在的3行和第9行分別顯示$TITLE 和$HEADER,這些變量值是從index.php傳遞過來的.


這個腳本在web瀏覽器上生成兩個按鈕,Insert和View,他們有相應(yīng)的行為.如果用戶點擊Insert,系統(tǒng)將調(diào)

用Insert.php.如果用戶點擊View,那么view.php將被調(diào)用

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"
                 onclick="javascript:location.href='index.php';">
36          </td>
37        </tr>
38      </table>
39    </form>
40  </body>
41 </html>


這個模板有一個表單和兩個按鈕,Add 和Return/Cancel.


用戶輸入數(shù)據(jù),first name,last name 和電子郵件字段.insert.php期望在名為x,y,z的變量中接收這些信息,用戶點

擊Add按鈕將運(yùn)行save.php.如果用戶點擊Return/Cancel,將會執(zhí)行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" 
               onclick="javascript:location.href='index.php';">
52       </td>
53     </tr>
54   </table>
55  </body>
56 </html>

這個模板顯示所有存儲在example數(shù)據(jù)庫中的所有數(shù)據(jù).


最后,Return按鈕把用戶帶回到主頁.

所有的這些(*.tpl)文件必須放在templates目錄下.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 久草高清视频 | 老子午夜影院 | 欧美一级黄 | 成人在线观看小视频 | 午夜伦情电午夜伦情电影 | 亚洲综合91| 久草视频手机在线观看 | 黄色午夜剧场 | 毛片在线免费 | 在线成人免费视频 | 成人福利视频在线 | 国产女厕一区二区三区在线视 | 麻豆国产网站 | 91精品动漫在线观看 | 久草在线免费资源站 | 春光影院理论片 | 久久久久久久久国产 | av成人免费 | 中文字幕一区2区 | 在线视频观看国产 | 国产精品91久久久 | 91香焦视频 | 国产精品欧美久久久久一区二区 | www.成人精品 | 色人阁五月天 | 久久免费毛片 | 亚洲国产色婷婷 | a一级黄色大片 | 国产日韩a | 日本欧美视频 | 午夜在线观看视频网站 | 蜜桃网站在线 | 国产亚洲综合一区二区 | 手机免费看一级片 | 国产精品视频免费在线观看 | av在线播放观看 | 欧美巨根| 一级做a爱片久久毛片a高清 | 亚洲国产成人一区 | 一区二区久久久久草草 | 国产乱淫av一区二区三区 |