﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-JiangZone-随笔分类-PHP</title><link>http://www.blogjava.net/cph8066/category/33393.html</link><description>天将降大任于是人也！</description><language>zh-cn</language><lastBuildDate>Tue, 29 Jul 2008 06:28:27 GMT</lastBuildDate><pubDate>Tue, 29 Jul 2008 06:28:27 GMT</pubDate><ttl>60</ttl><item><title>浅谈FleaPHP中的表关联！</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218391.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 06:02:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218391.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218391.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218391.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218391.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218391.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在关系数据库应用中，都离不开表与表的关联，表与表之间建立了关联关系后就可以提供很多方便的操作了，比如我要查询一个学生的信息，如果不建立学生与班级的关系的话，那么，只可以显示出学生的基本信息，而学生是属于某一个班级的，我现在想知道这个学生的信息与该学生所在的班级的信息，甚至是该学生的任课老师等信息，建立了学生表，与班级表，老师表之间的关系就方便好多了，用一个学生ID就可以查找出所有相关联的数据。<br />
<br />
在FleaPHP中，支持以下四种关联关系：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * HAS_ONE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * HAS_MANY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * MANY_TO_MANY<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; * BELONGS_TO<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
分别对应FLEA_Db_TableDataGateway表中的 $hasOne,$hasMany,$manyToMany,$belongsTo 属性<br />
<br />
我们下面就用 老师，学生，学生档案，班级的例子说说这几个关系。<br />
<br />
以下是SQL代码：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #808080;">//</span><span style="color: #000000;">学生表<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">Create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;`testDB`.`student`&nbsp;(<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`stu_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;AUTO_INCREMENT,<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`stu_name`&nbsp;</span><span style="color: #000000; font-weight: bold;">VARCHAR</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`stu_class_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;(`stu_id`)<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">)<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #808080;">//</span><span style="color: #000000;">学生档案表<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #0000ff;">Create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;`testDB`.`stu_record`&nbsp;(<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`record_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;AUTO_INCREMENT,<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`stu_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`family_add`&nbsp;</span><span style="color: #000000; font-weight: bold;">VARCHAR</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">150</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`family_tel`&nbsp;</span><span style="color: #000000; font-weight: bold;">VARCHAR</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">)&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;(`record_id`)<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">)<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #808080;">//</span><span style="color: #000000;">教师表<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #0000ff;">Create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;`testDB`.`teacher`&nbsp;(<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`teacher_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;AUTO_INCREMENT,<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`teacher_name`&nbsp;</span><span style="color: #000000; font-weight: bold;">VARCHAR</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;(`teacher_id`)<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">)<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #808080;">//</span><span style="color: #000000;">班级表<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #0000ff;">Create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;`testDB`.`classes`&nbsp;(<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`class_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;AUTO_INCREMENT,<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`class_name`&nbsp;</span><span style="color: #000000; font-weight: bold;">VARCHAR</span><span style="color: #000000;">(</span><span style="color: #800000; font-weight: bold;">20</span><span style="color: #000000;">)&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;(`class_id`)<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">)<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #808080;">//</span><span style="color: #000000;">由于教师与班级是多对多关系，所有建立一个中间连接表以表示该关联<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #0000ff;">Create</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">TABLE</span><span style="color: #000000;">&nbsp;`testDB`.`link_teacher_classes`&nbsp;(<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`link_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">&nbsp;AUTO_INCREMENT,<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`teacher_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;`class_id`&nbsp;</span><span style="color: #000000; font-weight: bold;">INTEGER</span><span style="color: #000000;">&nbsp;UNSIGNED&nbsp;</span><span style="color: #808080;">NOT</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">NULL</span><span style="color: #000000;">,<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">PRIMARY</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">KEY</span><span style="color: #000000;">&nbsp;(`link_id`)<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">)</span></div>
<br />
<br />
现在，建好表之后，我们还要写几个继承自FLEA_Db_TableDataGateway父类的类，以对应数据库中的Student，Teacher，Classes表（连接表不用了）如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">学生表对应的类</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Model_Student&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;FLEA_Db_TableDataGateway{<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$tableName</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">student</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$primaryKey</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_id</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是一对一关系，一个学生对应唯一的一个Record档案<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableClass&nbsp;对应要与之关联一对一的表的对象类，即档案表的类<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreignKey是在档案表中，对应学生表的一个外键接连字段，<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用该字段标识该档案属于哪个学生<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mappingName&nbsp;就是用于在你查询学生信息时，学生档案字段的别名<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$hasOne</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">tableClass</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Record</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">foreignKey</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_id</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mappingName</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">record</span><span style="color: #000000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这是从属关系，一个学生属于某一个班级，换过来说就是班级与学生一对多，<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;一个班级有多个学生，而学生就只属于一个班级<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableClass&nbsp;指定该类要与之有从属关系的类，这里是班级类<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreignKey&nbsp;这里指定的是该表里的连接外表的字段，这里是学生表的班级ID字段<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;注意：这里的foreignKey指的是本表的字段，而上面hasOne关系中的foreignKey<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;指的是外表中的字段，要注意区分清楚<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mappingName这里就不多说了，跟上面的一样，也是用于显示区分的别名<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$belongsTo</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">tableClass</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Classes</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">foreignKey</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_class_id</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mappingName</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">class</span><span style="color: #000000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">档案表对应的类</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Model_Record&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;FLEA_Db_TableDataGateway{<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$tableName</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_record</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$primaryKey</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">record_id</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">教师表对应的类</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Model_Teacher&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;FLEA_Db_TableDataGateway{<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$tableName</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">teacher</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">45</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$primaryKey</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">teacher_id</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">46</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">47</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">48</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里确立了教师与班级的多对多关系，一个教师可以教多个班级<br />
</span><span style="color: #008080;">49</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;而一个班级也有多个教师<br />
</span><span style="color: #008080;">50</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableClass&nbsp;指定要建立多对多关系的表的类<br />
</span><span style="color: #008080;">51</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;joinTable&nbsp;这个属性要注意一个，这个是指定教师表与班级表关系的连接表<br />
</span><span style="color: #008080;">52</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;由于二维表的数据结构的原因，所以多对多关系要用一个中间表（即连接表）来表示<br />
</span><span style="color: #008080;">53</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连接表中就指明两个表各自的主键ID就可以了，以两个字段作复合主键，如不用复合<br />
</span><span style="color: #008080;">54</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主键，就新增加一个字段作主键也可，这没关系<br />
</span><span style="color: #008080;">55</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">56</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$manyToMany</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">57</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">58</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">tableClass</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Classes</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">59</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mappingName</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">class</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">60</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">joinTable</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">link_teacher_classes</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">61</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
</span><span style="color: #008080;">62</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">63</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">64</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">65</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Model_Classes&nbsp;</span><span style="color: #0000ff;">extends</span><span style="color: #000000;">&nbsp;FLEA_Db_TableDataGateway{<br />
</span><span style="color: #008080;">66</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$tableName</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">classes</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">67</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$primaryKey</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">class_id</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">68</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">69</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">70</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;这里确立了班级与学生的一对多关系<br />
</span><span style="color: #008080;">71</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tableClass&nbsp;指定该表的类要与哪个表的类建立一对多关系<br />
</span><span style="color: #008080;">72</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreignKey&nbsp;外键ID，这里即指定学生表中定义的班级ID，这个是外表的字段<br />
</span><span style="color: #008080;">73</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">74</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$hasMany</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">75</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">76</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">tableClass</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Student</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">77</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">foreignKey</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_class_id</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">78</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mappingName</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">students</span><span style="color: #000000;">'</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">79</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)<br />
</span><span style="color: #008080;">80</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">81</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">82</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">var</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$manyToMany</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">83</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;由于多对多关系是双向的，所以班级表也可以定义上与教师表的多对多关系<br />
</span><span style="color: #008080;">84</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;也可以不写，看需求而定，比如你想查看某个班级信息时，一并显示该班<br />
</span><span style="color: #008080;">85</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;有多少个任课老师的话，那就在这个班级类里加上关系，我这里就不写了。。。</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">86</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">87</span>&nbsp;<span style="color: #000000;">}</span></div>
<br />
<br />
以上的代码就建立好了关系了，现在只管使用就是了。<br />
不过还提醒大家一点，在每个关系里，都有一个 &#8216;enabled&#8217; 的属性，如果设置为 false的话，则是将该关系禁掉，所以查询出来的结果就没有该关系的相应数据，这样可以节省效率，按需要时才打开相应的关联，该属性默认为true 可以如下设置：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">tableClass</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Student</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">foreignKey</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">stu_class_id</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mappingName</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">students</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&#8216;enabled&#8217;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">)</span></div>
<br />
<br />
现在我们来测试一下数据。（事先自行插入几行数据用以测试）<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #800080;">$classManager</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">getSingleton(</span><span style="color: #000000;">'</span><span style="color: #000000;">Model_Classes</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #800080;">$class</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&amp;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$classManager</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">find(</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">class_id</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">));<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">dump(</span><span style="color: #800080;">$class</span><span style="color: #000000;">);</span></div>
<br />
<br />
出现结果如下：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/cph8066/u20071029181042.PNG" width="354" height="505" /><br />
<br />
这个例子已含盖了这四个关联关系的基本用法了，其它的就由你们来探索了，不久后，我将会发表一下这此关联方面的高级应用，有时间的话会写写这方面的东西。敬请期待！<br />
<br />
<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218391.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 14:02 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218391.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FleaPHP初哥报到(2)－－用户注册与显示</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218387.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:58:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218387.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218387.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218387.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218387.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218387.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这篇文章是接着上一篇，在上一篇的基础上加了用户注册功能，注册成功后显示用户信息，由于时间关系，没有详细研究实现什么功能例子用于教学，本来我也只是FleaPHP初学者，所以，虽然例子十分的傻瓜式简单，但就当是我在学FleaPHP时的快速练习吧。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这里只实现了个注册功能，有经验的应该闭上眼睛都能做出来了，所以我这里的只是演示一下FleaPHP的大概操作流程的，也就是它的结构都是差不多，我在之前第一篇的那个Model_User类里，加了几个方法：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">添加一个新用户</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;addNewUser(</span><span style="color: #800080;">$user</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">_tbUser</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">create(</span><span style="color: #800080;">$user</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">用主键加载一个用户</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;loadUser(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">_tbUser</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">find(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<br />
并在Default.php里，也就是在Default的Controller里加了一个action与一个方法函数：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;actionRegister(){<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Model_User;<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$username</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$password</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$password2</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">"</span><span style="color: #000000;">password2</span><span style="color: #000000;">"</span><span style="color: #000000;">];<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #008080;">strlen</span><span style="color: #000000;">(</span><span style="color: #800080;">$username</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">用户名要求6-10位！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$password</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$password2</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">你输入的密码不一致，请重新输入！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #008080;">strlen</span><span style="color: #000000;">(</span><span style="color: #800080;">$password</span><span style="color: #000000;">)&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">6</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">密码要求6-10位！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/register.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">name</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$username</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$password</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$newUserId</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">addNewUser(</span><span style="color: #800080;">$user</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">30</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">31</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$newUserId</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">32</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">注册成功！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">33</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$this</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">showinfo(</span><span style="color: #800080;">$newUserId</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">34</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">35</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">出现错误，注册失败！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">36</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/error.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">37</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">38</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">39</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">40</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;showinfo(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">){<br />
</span><span style="color: #008080;">41</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Model_User;<br />
</span><span style="color: #008080;">42</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">loadUser(</span><span style="color: #800080;">$userid</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">43</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/userinfo.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">44</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span></div>
<br />
<br />
这都很直观了，大家注意的是流程的控制与转移，如果是开发小项目的话，这可能还会觉得麻烦，但当项目稍大时，程序结构将会很直观，控制流程很清淅。<br />
<br />
之后在View文件夹里加了register.php&nbsp; error.php等View文件，也主要是Html的，应尽量把逻辑代码与UI代码分开，这里只是初入门篇，迟点将会介绍与Smarty模板技术结合使用的文章。<br />
<br />
最终源码下载：[down=attachments/month_0710/k20071016235619.rar]点击下载此文件[/down]<br />
<br />
<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218387.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:58 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218387.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>FleaPHP初哥报到(1)－－简单登录</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218386.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:57:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218386.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218386.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218386.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218386.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218386.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于忙，很少时间学学 FleaPHP 框架，不过之前也看了看学了点东西，感觉FleaPHP框架还是很不错的，有良好的MVC模式结构，比较方便的数据库操作，好东西不敢独享，所以献上我在学习FleaPHP中的一点小心得，适合初接触 FleaPHP 框架的同学，PHP基础不太好的话，建议先补习一下PHP再看看这系列的文章。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 本例子是我刚学FleaPHP框架时的小练习，一步一步循序渐进，刚开始的例子显得比较简单，都只是熟习他的环境而已，不过我将采用增量开发的模式，慢慢完善深入，同学们记得专心上堂哦，做好功课哦。（文章的末尾将提供完整源代码打包，由于篇幅有限，所以文章中贴出来的代码有的只是片段）<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这篇是我写 FleaPHP 学习笔记的开篇，做的是一个简单的登录功能，牛刀小试吧，认大家认识一下 FleaPHP 的MVC结构与基本数据库操作，如果是对 FleaPHP 还不知道是什么东西的话，可以到以下网站了解了解。<a title="fleaphp.org" href="http://www.fleaphp.org">fleaphp.org</a><br />
<br />
数据库准备：数据库里就只有一个表&nbsp; tb_user&nbsp;&nbsp; 里面有三个字段，id ，name ，password 够简单吧[smile]<br />
<br />
我的这个FleaPHP应用的目录结构如下：<br />
<img alt="" src="http://www.blogjava.net/images/blogjava_net/cph8066/h20071010223143.jpg" width="88" height="73" /><br />
<br />
图中可以看到就一个index.php主页文件，一个app与一个FLEA文件夹，因为FleaPHP是采用单一入口框架，所以就只有一个index.php文件，所以的请求都经由这个文件再进行分类分发，这样可以提高代码的安全性，可以将程序其它文件放置到URL访问不到的地方，在index.php里引用该路径就可以了。不过有点要注意的是文件的路径的正确性。<br />
app文件夹就是我的程序代码放置的地方，里面有Controller，Model，View，Table文件夹，Controller文件夹都是FleaPHP的命名约定的，最好使用这样的命名，因为会跟据请求到该文件夹中找相对应的类文件的，好，我们先来看看index.php的代码：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">./FLEA/FLEA.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">import(</span><span style="color: #008080;">dirname</span><span style="color: #000000;">(</span><span style="color: #ff00ff;">__FILE__</span><span style="color: #000000;">)</span><span style="color: #000000;">.</span><span style="color: #000000;">"</span><span style="color: #000000;">/app</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;准备数据库连接信息</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #800080;">$dsn</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">array</span><span style="color: #000000;">(<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">driver</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">mysql</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">host</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">localhost</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">login</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">root</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">root</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">database</span><span style="color: #000000;">'</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">=&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">test</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">);<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">set_app_inf(</span><span style="color: #000000;">'</span><span style="color: #000000;">dbDSN</span><span style="color: #000000;">'</span><span style="color: #000000;">,</span><span style="color: #800080;">$dsn</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">runMVC();<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 就这么个三四行代码，程序就启动了，呵呵，不过后面还有呢。。。<br />
先来解析一下，第一句是 require("./FLEA/FLEA.php"); 就是要先导入FleaPHP的核心引擎，所以之前大家看到了有个FLEA文件夹，就是FLEA的核心引擎啦，这个大家先不用管它，等到要研究他的源代码时再看吧，平时的使用就看看提供的API文档就够了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 同学们注意了，FLEA::import(dirname(__FILE__)."/app"); 这句的作用是什么？这个import函数是FLEA的静态函数，用于将你的程序文件夹导入进来，如果有玩过Java的同学应该知道多少吧，当FleaPHP接收到一个请求时，会分析URL再调用相对的Controller和Action，<br />
如：http://localhost/fleatest/index.php?controller=Shop&amp;action=checkout 这里即调用Shop控制器里面的checkout动作，而FleaPHP怎么知道我的控制器代码放在哪里呢？就是靠import这个语句了，将程序文件夹导入进来之后，FleaPHP会自去到这个文件夹里找Controller文件夹再找Shop.php这个类文件，所以，如果你为了安全起见，将程序文件夹放在了其它访问不到的地方，就得靠这个import来导入，以FleaPHP能正确找到所需要的Controller。（可能说得啰嗦了[redface]，打字累了，烧根烟先，同学们小息片刻！）<br />
<br />
接下来$dsn这个数组就是存放你连接数据库的信息啦，聪明的同学一眼看出来了。之后当然要设置入FleaPHP配置里面啦，用这个set_app_inf('dbDSN',$dsn);，之后，FLEA::runMVC(); 这个就是启动了。我们输入的URL是 http://localhost/fleatest/index.php，由于FleaPHP默认的Controller是Default，默认的Action是Index，所以，这时，FleaPHP就会跳到app/Controller/Default.php这个页面来，代码如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">FLEA</span><span style="color: #000000;">::</span><span style="color: #000000;">loadClass(</span><span style="color: #000000;">"</span><span style="color: #000000;">Model_User</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;Controller_Default<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">{<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;actionIndex(){<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;actionLogin(){<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">新建一个对应user数据表操作的Model对象</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Model_User;<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">根据用户输入的用户名查找数据库有没有存在</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$result</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$mod_user</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">findByName(</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">username</span><span style="color: #000000;">'</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #0000ff;">empty</span><span style="color: #000000;">(</span><span style="color: #800080;">$result</span><span style="color: #000000;">)){<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">该用户不存在！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">判断密码是否相同</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #800080;">$result</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">]&nbsp;</span><span style="color: #000000;">==</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$_POST</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">password</span><span style="color: #000000;">'</span><span style="color: #000000;">]){<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$username</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$result</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">name</span><span style="color: #000000;">'</span><span style="color: #000000;">];<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/welcome.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="color: #0000ff;">else</span><span style="color: #000000;">{<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$message</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">'</span><span style="color: #000000;">密码不正确，请重新输入！</span><span style="color: #000000;">'</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">include</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">app/View/login.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">28</span>&nbsp;<span style="color: #000000;">}<br />
</span><span style="color: #008080;">29</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为什么类名是 Controller_Default ？这都是FleaPHP的命名规则，大家可以去官网看看它的命名规则，这里就不多啰嗦了。现在，它将会调用actionIndex的默认action函数，里面只引入了一个php文件，那就是登录界面的页面。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在登录界面的Form里，设置好action提交路径，使它提交到Default控制器的Login动作（action），里面实例化了一个Model对象，该对象是封装了对表tb_user的操作，之后程序逻辑就是跟据登录成功与否来进行相应的信息表示啦，简单的实现了从Controller -&gt; Model -&gt; View 的MVC访问操作流程。<br />
大概的结构就这么简单了。<br />
<br />
最后符上源代码：[down=attachments/month_0710/520071010232245.rar]点击下载此文件[/down]<br />
<br />
大家如果有什么疑问，可以留言或发到我邮箱里！<br />
<br />
<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218386.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:57 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218386.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP学习系列 Smarty模板技术（四）</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218385.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:55:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218385.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218385.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218385.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218385.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218385.html</trackback:ping><description><![CDATA[<strong>缓存</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 功能强大的应用程序一般都有很大的开销，通常是数据获取和处理操作带来的。对于Web应用程序，这个问题是由于HTTP协议的无状态性造成的。由于HTTP协议是无状态的，对于每个页面请求，都要重复地执行相同的操作，而不论数据是否修改。要让应用程序在世界范围最大的网络中可用，会使这个问题进一步恶化。所以，毫不奇怪，人们总在想方设法地让Web应用程序运行得更高效。对此有一种特别有效的解决方案，这也是最合理的方案之一：将动态页面转换成静态页面，只有在页面内容有修改之后才重新构建，或者定期地重新构建。Smarty提供了这样一个特性，一般称为页面缓存。<br />
&nbsp;&nbsp;&nbsp; 如果要使用缓存，需要首先通过设置Smarty 的缓存属性来启用缓存，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">caching&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">news.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 启用缓存后，调用 display() 和 fetch() 方法在指定模板 (由$cache_dir 属性指定) 中保存目标模板的内容。<br />
<br />
&nbsp;&nbsp;&nbsp; <strong>处理缓存生命期</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 缓存的页面在由 $cache_lifetime 属性指定的生命期（以秒为单位）内有效，默认为3600秒，即1小时。因此，如果希望修改此设置，就可以设置这个属性，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">caching&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">设置生命周期</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">cache_lifetime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1800</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">news.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">8</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
在此对象的生命期内，后续调用和缓存的模板都使用此生命期。<br />
&nbsp;&nbsp;&nbsp; 有可能需要覆盖以前设置的缓存生命期，从而能分别控制每个模板的缓存生命期。通过将$caching 属性设置为2就可以做到这一点，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
</span><span style="color: #008080;">4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">caching&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">2</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">cache_lifetime&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1200</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">news.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">7</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
在这里，news.tpl 模板的生命期设置为20分钟，它覆盖了前面设置的全局生命期值。<br />
<br />
<strong>通过 is_cached( ) 消除处理开销</strong><br />
<br />
&nbsp;&nbsp;&nbsp; 如前面所述，缓存模板还能消除处理开销，如果禁用缓存（只启用编译），这些处理开销总是会发生。但是，默认情况下并没有启用缓存。要启用缓存，需要把处理指令放在 if 条件中，并执行 is_cached( )方法，如下：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">caching&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">is_cached(</span><span style="color: #000000;">"</span><span style="color: #000000;">news.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">)){<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$conn</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">mysql_connect</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">localhost</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">pwd</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$db</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #008080;">mysql_select_db</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">news</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$query</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">select&nbsp;*&nbsp;from&nbsp;news</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;"><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><img src="http://www.blogjava.net/Images/dot.gif"  alt="" /></span><span style="color: #000000;"><br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">news.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在这个例子中，将首先验证模板news.tpl是否有效。如果有效，则跳过数据库访问，否则才访问数据库。<br />
<br />
<strong>为每个模板创建多个缓存</strong><br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 任何指定的Smarty模板都可以用于为整个新闻项，博客项等提供一个通用界面。由于同一个模板用来生成不同数量的不同项，那么如何缓存一个模板的多个实例呢？答案比你想像的要简单。Smarty的开发人员实际不已经解决了这个问题，可以通过display()方法为缓存模板的每个实例指派一个唯一标识符。例如，假设有一个用生成用户信息的模板，并希望缓存这个模板的各个实例：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">"</span><span style="color: #000000;">User.class.php</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">caching&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">;<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">根据不同的用户ID来区分不同的用户实例来判断有没有被缓存</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;is_cached(</span><span style="color: #000000;">"</span><span style="color: #000000;">userinfo.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$_GET</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">userid</span><span style="color: #000000;">'</span><span style="color: #000000;">])){<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$user</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;User();<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;"><br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$user</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getName());<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">address</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$user</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">getAddress());<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">/*</span><span style="color: #008000;"><br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;当显示时也根据该用户的ID来区分将哪个实例进行缓存，而不影响其它用户的缓存<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;即是用userid&nbsp;值来区分同一个缓存模板的不同实例，所有用户都共用一个模板，<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;&nbsp;但信息都不尽相同，所以不能统一缓存，要独立分开缓存<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #008000;">&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">*/</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">userinfo.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #800080;">$_GEG</span><span style="color: #000000;">[</span><span style="color: #000000;">'</span><span style="color: #000000;">userid</span><span style="color: #000000;">'</span><span style="color: #000000;">]);<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">?&gt;</span></div>
<br />
特别注意下面一行：<br />
&nbsp;&nbsp;&nbsp; $smarty-&gt;display("userinfo.tpl",$_GEG['userid']);<br />
这一行对于此脚本有两个功能，一方面获取名为$_GET['userinfo'] 的 userinfo.tpl 缓存版本，另一方面，如果还不存在这个缓存，则用这个名字来缓存该模板实例。采用这种方式，可以轻松地为指定模板缓存任意数量的实例。<br />
<br />
<strong>关于缓存的结语</strong><br />
<br />
&nbsp;&nbsp;&nbsp; 模板缓存大大提升了应用程序的性能，如果决定将Smarty集成到工程中来，就应当认真地考虑缓存。但是，因为大多数强大的Web应用程序功能都体现在其动态性上，所以一方面要考虑到性能提升，另一方面也要考虑到缓存页面随时间是否仍有效，要在这二者之间进行权衡。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218385.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:55 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218385.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP学习系列 Smarty模板技术（三）</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218383.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:51:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218383.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218383.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218383.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218383.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218383.html</trackback:ping><description><![CDATA[<strong>Smarty 的配置文件</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 开发人员一直使用配置文件来存储确定应用程序行为和操作的数据。例如，php.ini 文件负责确定PHP的大量行为。对于Smarty ，模板设计人员也可以利用配置文件的强大作用。例如，设计人员可以使用配置文件存储页面标题、用户消息以及有必要集中存储的任何信息。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以下是一个示例配置文件 （名为 app.config）：<br />
<br />
#Global Variables<br />
appName = "PMNP News Service"<br />
copyright = "Copyright 2005 PMNP News Service, Inc."<br />
<br />
[Aggregation]<br />
title = "Recent News"<br />
warning = "Copyright warning.Use of this information is for personal use only."<br />
<br />
[Detail]<br />
title = "A Closer Look..."<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中括号中包围的项称为节(section)。节之外的项都认为是全局的。这此项应当在定义任何节之前定义。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; 下面将展示如何使用config_load 函数来加载配置文件，还会解释如何在模板中引用配置变量。<br />
&nbsp;&nbsp;&nbsp; 配置文件存储在 configs 目录中，并使用Smarty函数 config_load 加载。下面是加载配置文件 app.config 的示例：<br />
&nbsp;&nbsp;&nbsp; {config_load file="app.config"}<br />
但是要记住，此调用只能加载配置文件的全局变量。如果要加载特定的节，需要使用 section 属性指定。所以，可以使用以下语法加载 app.config 的节 Aggregation:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {config_load file="app.config" section="Aggregation"}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 另外两个可选参数介绍如下：<br />
&nbsp;&nbsp;&nbsp; scope：确定所加载的配置变量的作用域。默认情况下设置为local，表示变量只能用于本地模板。其它可能的设置包括 parent 和 global 。作用域设置为 parent 时，变量可用于本地模板和调用模板。作用域设为global 时，变量则可以用于所有模板。<br />
&nbsp;&nbsp;&nbsp; section：指定加载配置文件的特定节。因此，如果只对某个特定节感兴趣，可以只加载该节，而非整个文件。<br />
<br />
<strong>引用配置变量</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 配置文件中变量的引用方式与其它变量的引用方式有所不同。实际上，这些配置变量使用几种不同的语法来引用，下面将介绍这个内容。<br />
&nbsp;&nbsp;&nbsp; 1、#<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在 Smarty 模板中，可以在变量前面加上#号来引用配置变量。例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {#title}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、Smarty的$smarty.config变量<br />
&nbsp;&nbsp;&nbsp; 引用配置变量时，如果喜欢更为正式的语法，可以使用 Smarty 的 $smarty.config 变量。例如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$smarty.config.title}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、get_config_vars() 方法<br />
&nbsp;&nbsp;&nbsp; array get_config_vars([string variablename])<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; get_config_vars() 方法返回一个数组，包含加载的所有配置变量值。如果只对某个变量值感兴趣，可以通过 variablename 传入该变量。例如，如果只对以上 app.config&nbsp; 配置文件中 Aggregation 节的 title 感兴趣，可以首先使用 config_load 函数加载该节：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {config_load file="app.config" section="Aggregation"}<br />
然后，在模板中启用PHP的节中调用 get_config_vars( )，如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $title = smarty-&gt;get_config_vars("title");<br />
当然，无论选择哪一种获取配置参数的语法，都不要忘记首先使用 config_load 函数加载配置文件。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218383.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:51 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218383.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP学习系列 Smarty模板技术（二）</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218379.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:49:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218379.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218379.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218379.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218379.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218379.html</trackback:ping><description><![CDATA[<strong>Smarty 的表现逻辑</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 第一编文章中，只简单的讲述了Smarty里的基本原理，也就传几个变量的值而已，而本节中，将会讲述Smarty的逻辑表示结构，比如它的分支，修饰符，迭代等结构的表达。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; <strong>（1） 注释：</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 中Smarty中，也可以使用注释，设计人员可以用注释在模板页面中传递一些说明信息等。在Smarty中的注释为：{* Hello Jiang! *}，大家可以看到，Smarty中的注释是用{**}来包围的，可以单行，也可以多行，比如可以这样写：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {* Hello <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Jiang! *}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp; <strong>（2）变量修饰符：</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 在Smarty中，可以为变量添加修饰符，用于对变量进行一些Smarty已定义好的操作，变量修饰符的写法是：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$var|modifier}<br />
其中，$var 是变量，modifier 是修饰符的单词，意为对指定变量进行某种修饰操作。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、capitalize 修饰符<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; capitalize 修饰符用于对变量内的值中所有单词的首字母变为大写，可看示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $smarty = new Smarty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $smarty-&gt;assign("$title","hello jiang zone");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $smarty-&gt;display("index.tpl");<br />
<br />
index.tpl 内容为：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$title|capitalize}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、count_words<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; count_words 函数统计变量中的单词总数<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、date_format<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; date_format 函数是PHP strftime() 函数的包装器，它能将可以被strftime()解析的任何日期/时间格式字符串转换为某种特殊格式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、default<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; default 函数当应用层没有返回值时，default为指示特定变量的默认值提供了一种简单的方式。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、strip_tags<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strip_tags 函数删除变量字符串中的标签符号。如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $smarty-&gt;assign("name","&lt;b&gt;Jiang&lt;/b&gt;");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 模板里这样写：{$name|strip_tags}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 会输入如下name的值："Jiang"，它将&lt;b&gt;&lt;/b&gt;删除了。所以，没有输出粗体<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6、truncate<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; truncate 函数将变量字符串截取为指定数量的字符。]<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>（3）控制结构</strong><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、if-elseif-else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Smarty 的if语句与PHP语言中的if语句相同，与PHP一样，可以使用一些条件限定符如下：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; eq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; gte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ge<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; lte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; le&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ne<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; neq&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is even&nbsp;&nbsp;&nbsp;&nbsp; is not even&nbsp;&nbsp; is odd<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; is not odd&nbsp; div by&nbsp;&nbsp;&nbsp;&nbsp; event by&nbsp;&nbsp;&nbsp; not<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mod&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; odd by&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ==&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; !=<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &gt;=<br />
示例：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {if $var &gt; 5}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;Hello JiangZone&lt;/p&gt;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {/if}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、foreach<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreach 标记的作用与PHP语句中的命令相同。但如下所示，其语法大不相同。它有4个参数，其中两个是必要的：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; form : 这个必要参数指定目标数组的名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; item : 这个必要参数指定当前元素的名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; key : 这个可选参数指定当前键的名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name : 这个可选参数指定节的名。这个名是任意的，应当设置为一个描述性的名字。<br />
看看如下例子：<br />
require("Smarty.class.php");<br />
$smarty = new Smarty;<br />
$daysofweek = array("Mon","Tues","Weds","Thu","Fri","Sat","Sun");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
$smarty-&gt;assign("daysofweek",$daysofweek);<br />
$smarty-&gt;display("daysofweek.tpl");&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
<br />
以下是daysofweek.tpl模板文件：<br />
{foreach from=$daysofweek item=$day}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$day}&lt;br /&gt;<br />
{/foreach}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、foreachelse<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foreachelse 标记与 foreach 一起使用，与用于字符串的 default 标记作用类似，数组为空时 foreachelse 标记可以生成某个候选结果。以下是一个使用 foreachelse 的模板示例：<br />
{foreach key=key item=item from=$titles}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {$key}: {$item}&lt;br /&gt;<br />
{foreachelse}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;p&gt;No states matching your query were found.&lt;/p&gt;<br />
{/foreach}<br />
注意，foreachelse 不使用结束括号：它嵌入到foreach中，这与elseif嵌入到if语句中很类似。<br />
<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <strong>（4）语句</strong><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Smarty 提供了几个用于完成特殊任务的语句。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、include<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; include语句与PHP包中的同名语句相同，只是它只用于将其它模板导入到当前模板。例如，假设希望在Smarty模板中导入两个文件，header.tpl 和 footer.tpl ，可以如下完成：<br />
{include file="header.tpl"}<br />
{include file="footer.tpl"}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、insert<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; insert 标记与 include 标记的功能相同，只是它要导入不会被缓存的数据。例如，可以使用这个函数插入经常更新的数据，如股票价格，天气预报或其它在很短时间内就要改变的内容。它也接受几个参数，一个是必要的，另外三个是可选的：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name : 这个必要参数确定insert函数的名。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; assign : 这个可选参数可用于将输出给变量，而不是直接发送到输出。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; script : 这个可选参数可以指向在导入文件前直接执行的一个PHP脚本。当输出文件的内容依赖于脚本所完成的某个特定动作时，可以使用此参数。例如，可以执行一个PHP脚本，返回某个默认的股票价格放在不可缓存的输出中。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; var : 这个可选参数用于传入所有插入模板使用的其它参数。可以通过这种方式传递很多参数。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、literal<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; literal 标记告诉Smarty ：标记中嵌入的任何数据都应当原样输出，不需要转换。这个标记量常用于在模板中嵌入JavaScript 和CSS ，从而不需要担心与 Smarty 的定界符冲突。<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、php<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 可以使用php函数在模板中嵌入PHP代码。{php}{/php}标记中的任何代码都由PHP引擎处理。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218379.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:49 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218379.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PHP学习系列 Smarty模板技术（一）</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218375.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:46:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218375.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218375.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218375.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218375.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 其实本人也正在学PHP，所以就把学习PHP时的心得体会与所学到的知识分享一下吧，所以这一系列教程（或者是心得吧），将围绕在初学PHP过程中遇到的问题和需要注意的地方。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这是关于PHP中Smarty模板技术的第一编，为什么要说模板技术呢？原因很简单，如果你想做一个合格的PHP程序员的话，如果你想开发一个结构合理、移植方便的系统的话，那就要留意一下PHP的模板技术，而在PHP的模板技术中，Smarty是一个不错的选择。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用模板化主要有两个原因：1、可以使用同样的代码基为不同的目标生成数据。2、应用程序设计人员（负责创建和维护界面的人）可以与应用程序开发人员独立工作，因为用表现和逻辑并非密不可分地纠缠在一起。但模板化引擎如何完成这种分离？有趣的是，大多数实现的做法与编程语言非常相似，为完成各种与界面有关的任务提供了良好的定义的语法和命令集。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Smarty提供了很多强大的功能。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1、强大的表现逻辑<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2、模板编译<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3、缓存<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4、高度可配置和可扩展<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5、安全<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 如何使用Smarty？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 使用Smarty与使用其它任何类库一样。对于初学者，只需要在执行脚本中使Smarty类库可用。实现这一点非常容易，使用&nbsp; require()&nbsp; 语句即可：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; require("Smarty.class.php");<br />
之后，就可以实例化Smarty类：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $smarty = new Smarty;<br />
现在，就可以用Smarty来做东西了。下面看看一个小例子：<br />
以下是模板文件 index.tpl ：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #0000ff;">&lt;</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">{$title}</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">title</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">head</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">body&nbsp;</span><span style="color: #ff0000;">bgcolor</span><span style="color: #0000ff;">="#ffffff"</span><span style="color: #ff0000;">&nbsp;text</span><span style="color: #0000ff;">="#000000"</span><span style="color: #ff0000;">&nbsp;link</span><span style="color: #0000ff;">="#0000ff"</span><span style="color: #ff0000;">&nbsp;vlink</span><span style="color: #0000ff;">="#800080"</span><span style="color: #ff0000;">&nbsp;alink</span><span style="color: #0000ff;">="#ff0000"</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Hi,{$name}.Welcome&nbsp;to&nbsp;the&nbsp;wonderful&nbsp;world&nbsp;of&nbsp;Smarty.<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">p</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">body</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">html</span><span style="color: #0000ff;">&gt;</span></div>
<br />
以下是PHP页面方面代码&nbsp; index.php：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">&lt;?</span><span style="color: #000000;">php<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">require</span><span style="color: #000000;">(</span><span style="color: #000000;">'</span><span style="color: #000000;">Smarty.class.php</span><span style="color: #000000;">'</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Smarty;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">name</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">JiangZone</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">assign(</span><span style="color: #000000;">"</span><span style="color: #000000;">title</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">Jiang's&nbsp;Blog</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #800080;">$smarty</span><span style="color: #000000;">-&gt;</span><span style="color: #000000;">display(</span><span style="color: #000000;">"</span><span style="color: #000000;">index.tpl</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #000000;">?&gt;</span></div>
<br />
<br />
从以上两段代码可以看得到，index.tpl文件是页面文件，没有业务逻辑代码，只有{$name},{$title}，初学者可能觉得怪，不过如果有Java基础的话，应该看得出，它跟Jsp的EL表达式有点类似，或者跟标签库功能有点像。这样看上去，页面跟程序逻辑就分开来了，设计师专注于他的页面设计，需要放入处理后的值的话，就加上个{$name}等标记，而程序员则专注于程序逻辑的实现，将处理结果放到模板页面那里相应的变量位置。明眼人可能很快看得出，上面PHP代码里，$smarty-&gt;assign("name","JiangZone");就是一个对模板赋值的过程，意为为模板中的变量$name 的值设为字符串&#8220;JiangZone&#8221;，下面的也是一样，而最后那句，$smarty-&gt;display("index.tpl");则是将上面设置好的值应用到index.tpl模板上，并将应用后的结果输出到客户端。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:46 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218375.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[PHP初学心得]PHP初学注意，POST获取同名表单项数组</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218374.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:45:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218374.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218374.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218374.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218374.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218374.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 我在初学PHP期间，学了点入门文章，学了学语法，就想做点小东西来练练手，做什么好呢？就做个购物车吧，页面都做好了，现在正写代码进去，测试运行，但有个小问题，我在产品列表里明明是选了几个产品的，即是选中了几个 Checkbox ，checkbox 的名字都是"prodno" 但怎么在PHP里用 $_POST['prodno'] 来获取它的值，总是只获取到最后的那个checkbox 的值，为什么？检查了form几遍，没有错误，再检查了PHP几遍，也没错啊[loo]（其实是checkbox里的name错了，当时不知道PHP要这样），郁闷了，我以前做Java都是这样写的呀，有什么问题？做ASP时，也是这样写也没错呀，问题出在哪呢？<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 后来用 is_array($_POST['prodno']) 得到的是false，不会吧，PHP不会获取重复名字的表单？唉，后来上网Google了一翻，原来PHP里获取重复名字的表单值跟JSP/ASP等的都不一样，JSP的直接用 request.getParameterValues("prodno"); 返回的是一个String[] 数组，但PHP的差别在于，要将form里的 checkbox 的 name 写成： prodno[] 就是要多了后面那对方括号，之后PHP里 $_POST['prodno'] 获得的就是一个 array ，唉，这样都行，不过后来想想，这个可能跟PHP的一个语法有关吧，在PHP里，数组是可以这样赋值的：<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[] = 'aaa';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[] = 'bbb';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $arr[] = 'ccc';<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这样写的话，$arr 里就有三个值，key分别是0，1，2，而value分别是'aaa','bbb','ccc',<br />
就是说在PHP里，你给数组赋值的话，不写key的话，他会默认用递增的数字来自动当key,所以，当表单提交到PHP里时，实际上就是 <br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $prodno[] = 'a';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $prodno[] = 'b';<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，当 $_POST['prodno'] 的值就是$prodno 的值，所以它是一个数组，<br />
而如果表单里name的值写成 prodno 的话，就会是<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $prodno = 'a';<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $prodno = 'b';<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 所以，大家可以看得出问题所在了，这样$prodno的值始终会给最后的那个值覆盖，所以就出现我之前的现像我用$_POST['prodno']获取到的值总是我最后的那个checkbox的值，所以更不用说is_array()了，当然是得到false了。<br />
所以，对于一些有其它编程语言基础的人来说，学PHP的话，要注意这点，跟别的语言都不同。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218374.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:45 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218374.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载] 彻底杜绝PHP的session cookie错误</title><link>http://www.blogjava.net/cph8066/archive/2008/07/29/218373.html</link><dc:creator>姜大叔</dc:creator><author>姜大叔</author><pubDate>Tue, 29 Jul 2008 05:44:00 GMT</pubDate><guid>http://www.blogjava.net/cph8066/archive/2008/07/29/218373.html</guid><wfw:comment>http://www.blogjava.net/cph8066/comments/218373.html</wfw:comment><comments>http://www.blogjava.net/cph8066/archive/2008/07/29/218373.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/cph8066/comments/commentRss/218373.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/cph8066/services/trackbacks/218373.html</trackback:ping><description><![CDATA[本文讨论的是如何彻底杜绝warning: Cannot add header information - headers already sent in......&nbsp; 这种令人莫明其妙的的错误。<br />
<br />
只要你写过PHP代码,相信都遇上过这个大多时候都令人莫明其妙的warning吧..今天我们就来搞定它...............<br />
<br />
看了PHP手册，回答如下：<br />
<br />
消息&#8220;Warning： Cannot send session cookie - headers already sent。。。&#8221;或者&#8220;Cannot add header information - headers already sent。。。&#8221;。<br />
<br />
函数 header()，setcookie() 和 session 函数需要在输出流中增加头信息。但是头信息只能在其它任何输出内容之前发送。在使用这些函数前不能有任何（如 HTML）的输出。函数 headers_sent() 能够检查您的脚本是否已经发送了头信息。请参阅&#8220;输出控制函数&#8221;。<br />
<br />
意思是：不要在使用上面的函数前有任何文字，空行，回车，空格等。但。。。问题是，这答案并不令人满意。因为往往程序在其他PHP环境下运行却正常。<br />
&nbsp;<br />
<br />
首先：这错误是怎么产生的呢？让我们来看看PHP是如何处理HTTP header输出和主体输出的。<br />
<br />
PHP 脚本开始执行时，它可以同时发送header(标题)信息和主体信息。 Header信息(来自 header() 或 SetCookie() 函数)并不会立即发送，相反，它被保存到一个列表中。 这样就可以允许你修改标题信息，包括缺省的标题(例如 Content-Type 标题）。但是，一旦脚本发送了任何非标题的输出（例如，使用 HTML 或 print() 调用)，那么PHP就必须先发送完所有的Header，然后终止 HTTP header。而后继续发送主体数据。从这时开始，任何添加或修改Header信息的试图都是不允许的，并会发送上述的错误消息之一。<br />
<br />
好!那我们来解决它：<br />
<br />
笨方法：把错误警告全不显示!<br />
掩耳盗铃之计，具体方法就不说了 ^_^#<br />
<br />
解决方案：<br />
<br />
1)适用于有权限编辑PHP。INI的人<br />
<br />
打开php。ini文件(你应试比我清楚你的php。ini在哪里)，找到<br />
<br />
output_buffering =改为on或者任何数字。如果是IIS6，请一定改为ON，不然你的PHP效率会奇慢。<br />
<br />
2)使用虚拟主机，不能编辑PHP。INI，怎么办？<br />
<br />
简单：<br />
<br />
在你的空间根目录下建立一个。htaccess文件，内容如下：<br />
<br />
AllowOverride All<br />
PHP_FLAG output_buffering On<br />
<br />
不幸的情况是：还是不行？全部网页都不能显示啦？<br />
<br />
那么，你可以打电话骂一通空间商，然后让他给你把apache的。htaccess AllowOverride打开<br />
<br />
3)在PHP文件里解决<br />
<br />
ob_start()<br />
启用output buffering机制。 Output buffering支持多层次 -- 例如，可以多次调用 ob_start() 函数。<br />
<br />
ob_end_flush()<br />
发送output buffer（输出缓冲）并禁用output buffering机制。<br />
<br />
ob_end_clean()<br />
清除output buffer但不发送，并禁用output buffering。<br />
<br />
ob_get_contents()<br />
将当前的output buffer返回成一个字符串。允许你处理脚本发出的任何输出。<br />
<br />
原理：<br />
<br />
output_buffering 被启用时，在脚本发送输出时，PHP并不发送HTTP header。相反，它将此输出通过管道（pipe）输入到动态增加的缓存中（只能在PHP 4。0中使用，它具有中央化的输出机制）。你仍然可以修改/添加header，或者设置cookie，因为header实际上并没有发送。当全部脚本终止时，PHP将自动发送HTTP header到浏览器，然后再发送输出缓冲中的内容。<br />
<img src ="http://www.blogjava.net/cph8066/aggbug/218373.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/cph8066/" target="_blank">姜大叔</a> 2008-07-29 13:44 <a href="http://www.blogjava.net/cph8066/archive/2008/07/29/218373.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>