分页类及验证类的使用

#1 setlt

官方已较为详细的提供了数据验证类的使用,不过给人感觉还是不够具体,比如如何在页面上输出错误信息,就没有详细的说明。当然搞明白了就感觉很简单,不过对于刚接触的新人,就会有点莫名其妙了,呵,包括我在内哦。至于分页类好像至今还没有教程。为了方便新人,同时也作为练习,就写了一个简单的例子,来具体运用一下这两个类。本人不是很会写教程,忘见谅。下面就通过一个简单的数据添加及分页显示的例子来说明一下吧。
1、本例要用到数据库,因此先建立名为speed的数据库,在数据库里建一个sp_msg表,

CREATE TABLE `speed`.`sp_msg` (
`id` INT NOT NULL AUTO_INCREMENT ,
`title` VARCHAR( 50 ) NOT NULL ,
`content` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `id` )
) ENGINE = InnoDB
建好了数据库,接下来就要在index.php中配置一下了,

'db' => array(  // 数据库连接配置
  'driver' => 'mysql',
  'host' => 'localhost',
  'login' => 'root',
  'password' => '',
  'database' => 'speed',
  'prefix' => 'sp_',
),
2、配置好了数据库,下面就要建立一个控制器及一个模型类了。
分别建立控制器Msg.php,模型类MsgM.php文件。本示例仅包含显示及添加两个操作,因此控制器中两种方法足矣,建立方法


//显示页面
function index(){

}


//添加信息
function add(){

}
太长了,楼下继续

2009-12-25 22:59:00

#2 setlt

在模型类文件MsgM.php写下如下代码

class MsgM extends spModel {

public $pk='id';
public $table='msg';

}
模型也建立了,视图页面呢,下面继续:
由于用了自动输出功能,因此在tpl模板目录下建立与控制器同名的Msg文件夹,在该文件夹下建立index.html及add.html两个模板文件。至此,基本框架建起来了。不过我们的主题现在才正式开始。

废话了这么多,下面进入正式的编码阶段:
完善控制器中add方法

function add(){
  $this->title='信息添加';
  $msg=spClass('MsgM');
  if($this->spArgs('add')){
   $row=array(
    'title'=>$this->spArgs('title'),
    'content'=>$this->spArgs('content'),
   );
  $verifier=$msg->spVerifier($row);
  if(false==$verifier){
   $msg->create($row);
   $this->jump(spUrl('Msg','index'));
  }else{
   $this->errmsg=$verifier;
  }
  }
打开模型类MsgM.php文件,建立验证规则

/**
* @author setlt
* @todo msg模型类
*/
class MsgM extends spModel {
public $pk='id';
public $table='msg';

//验证规则及提示信息
public $verifier=array(
  "rules"=>array(
   'title'=>array(
    'notnull'=>TRUE,
    'minlength'=>4
   ),
   'content'=>array(
    'notnull'=>TRUE,
   ),
  ),
  
  "messages"=>array(
   'title'=>array(
    'notnull'=>'标题不能为空',
    'minlength'=>'标题至少4个字',
   ),
   'content'=>array(
    'notnull'=>'内容不能为空',
   ),
   
   
  ),
);
}
?>
打开add.html模板文件,写入如下代码:

http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
http://www.w3.org/1999/xhtml">


{$title}





{$title}




{$errmsg.title[0]}



  
  
  {$errmsg.content[0]}



  





访问一下,测试一下表单,就看到效果了。
其实比起官方教程唯一多出来的就是把错误信息在模板页面进行输出。其他的请参照官方教程。

楼下继续

2009-12-25 23:12:51

#3 setlt

信息添加了,现在就让它分页显示吧,完善index方法如下:

//信息显示页面
function index(){
  $this->title='分页显示';
  $pageSize=2;//每页条数,可自由改变
  $pageNum=$this->spArgs('num');//获取当前页数
  if(empty($pageNum)){
   $pageNum=1;
  }
  //spPager(当前页,每页条数)
  $results=spClass('MsgM')->spPager($pageNum,$pageSize)->findAll();
  if($results){
   $this->results=$results;
   $this->yema=spClass('MsgM')->spPager()->getPager();
  }
}
红字部分请注意,那是分页的应用。
控制器完成了,当然要显示出来,完善index.html模板文件,下面是模板的主体

{$title}



{foreach from=$results item=row}
{$row.title}


{$row.content}

{foreachelse}

暂无信息


{/foreach}

首页
上一页
下一页
尾页
{foreach from=$yema.all_pages item=value}
  {$value}
{/foreach}

和平常的一样,只不过多了一些关于分页的输出。
当然还有其他选项可以输出,那就看个人需求了,至此,演示完毕,有点罗嗦,有点杂乱。附上演示文件,可以一目了然。
压缩包里另包含了一个上传类和验证码类。speed.rar

2009-12-25 23:22:05

#4 jake

其实spArgs的用途里面是包括了默认值的,所以上面的:

$pageNum=$this->spArgs('num');//获取当前页数
  if(empty($pageNum)){
   $pageNum=1;
  }
可以直接是:
$pageNum=$this->spArgs('num', 1);//获取当前页数

同时感谢setlt朋友提供了那么多好用的扩展类给我们。

2009-12-26 09:30:40

#5 vsxp

:lol:victory:

2010-01-03 01:25:38

#6 eoneliu

接触了 这个 框架。感觉简单好用。非常不错。支持!!

2010-03-08 21:54:04