海角不转弯

代码是梦想的砖

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

今天完成了个人信息的更新及密码的修改。

主要还是针对昨天看到的知识点做些总结

1、关于认证Zend_Auth类的运用。

 1   //获取数据库适配器
 2     $db=Zend_Db_Table::getDefaultAdapter();
 3     //获取认证适配器
 4     $authAdapter=new Zend_Auth_Adapter_DbTable($db,'users','username','password');
 5   //为认证类适配器添加认证条件
 6     $authAdapter->setIdentity($data['username'])->setCredential(md5($data['password']));
 7 //关键点----认证
 8     $result=$authAdapter->authenticate();
 9     //判断认证结果
10     if($result->isValid()){
11         $auth=Zend_Auth::getInstance();
12         //如果正确,则保存认证结果
13         $storage=$auth->getStorage();
14         //保存的项
15         $storage->write($authAdapter->getResultRowObject(array(
16                 'id','username','role')));

保存的认证在后来的开发中起着非常重要的作用。由于Zen_auth是单例模式,所以在任何地方都可以直接用getinstance实例化。

2、关于表单的使用

用zf创建表单前期的添加表单项比较麻烦,但是后期的话比较方便。首先在controllers下添加form/User.php主要用于创建表单的类。

 1 <?
 2 class Form_User extends Zend_Form{
 3 //直接初始化创建
 4    public function init(){
 5 //首先设置数据提交方式
 6   $this->setMethod('post');
 7   //仅仅选取其中几个不同的举例
 8 //首先是用户名text类型
 9   $username=$this->createElement('text','username');
10   $username->setLabel('用户名:');
11   $username->setRequired(true);
12   $username->addValidator('stringLength',false,array(5,10));
13   $username->addErrorMessage('用户名5-10');
14   $this->addElement($username);
15 //然后是性别
16   $sex=$this->createElement('radio','sex');
17   $sex->setLabel('性别:');
18   $sex->addMultiOptions(array(1=> '男',0 =>'女'));
19   $sex->setSeparator("");
20   $this->addElement($sex);
21 //然后是密码
22    $password=$this->createElement('password','password');
23    $password->setLabel('密码:');
24    $password->addValidator('stringLenght',false,array(6));
25    $password->addErrorMessage('密码6位以上');
26    $this->addElement($password);
27 //然后是
28 //确认密码
29   $password2=$this->createElement('password','password2');
30    $password2->setLabel('确认密码:');
31    $password2->setRequired(TRUE);
32    $password2->addValidator('identical',false,array('token' =>'password'));
33    $password2->addErrorMessage('两次输入不一致ͬ');
34    $this->addElement($password2);
35 //
36     //简介
37     $profile=$this->createElement('textarea', 'profile');
38     $profile->setLabel('个人简介:');
39     $profile->setAttribs(array('rows'=>4,'cols'=>50));
40     $this->addElement($profile);
41     //头像
42         $avatar=$this->createElement('file', 'avatar');
43         $avatar->setLabel('头像:');
44         $avatar->setRequired(false);
45         $this->addElement($avatar);
46         
47     //用户状态
48         $status=$this->createElement('select', 'status');
49         $status->setLabel('用户状态:');
50         $status->addMultiOptions(array(
51                 '0'=>'锁定','1'=>'激活',
52         ));
53         $status->setRequired(true);
54         $this->addElement($status);
55     //角色
56       $role=$this->createElement('select', 'role');
57       $role->setLabel('用户角色');
58       $role->addMultiOptions(array(
59               'user'=>'用户',
60             'edit'=>'编辑',
61               'admin'=>'管理员'
62       ));
63 
64 }
65 
66 }

然后在后期,我们可以在控制器里引入并实例化,通过removeElement('')方法移除不需要的元素在处理提交数据的时候一定要注意验证数据isValid()方法.之后就可以通过getValue方法进行相关数据的操作

3、关于Zend_Db_Table_Row的使用

首先可以在表模型中添加相应的数据操作方法,这是非常好用的。可以在控制器实例化数据类的时候直接调用相应的方法。

在表模型的方法中可以通过$this->createRow()来创建一列,这主要用于插入一条记录。对于修改一条记录,有多种方法,但我试成功的方法有以下几种

  a/ 对应该表的键值的数组$data可以用createRow($data)来创建。$newrow=$this->createRow($Data);//创建一个新行$newrow->save();

 

访问可以用$newrow->id等方式直接访问。

b/  $row->setFromArray($data)用户更新记录信息,$data依然是数组。可以是多个键值组,不一定要完全表。$row->save();

这里做个笔记,关于zf里面zend_db_row的相关信息参考:http://framework.zend.com/manual/1.12/en/zend.db.table.row.html

 

4、关于上传头像图片文件的zf操作。这里比较难,纠结了一个下午,好歹被做好了。

 

 1           //实例化传输适配器
 2           
 3           $adapter=new Zend_File_Transfer_Adapter_Http();
 4           //创建存储路径
 5           $path=APPLICATION_PATH.'/../public/uploads/'.date('Y-m').'/avatar/';
 6           //创建文件夹
 7           $folder=new Zend_Search_Lucene_Storage_Directory_Filesystem($path);
 8           //获取文件信息
 9           $fileInfo=$adapter->getFileInfo();
10           //获取扩展名
11           $extName=$this->_getExtension($fileInfo);
12           //图片整名
13          $fileName=time().'.'.$extName;
14          
15 //           //适配器校验
16        $adapter->addFilter('Rename',array('target'=>$fileName,'overwrite'=>true));
17 //           //设置目标路径
18         $adapter->setDestination($path);
19 //           //检验图片大小
20         $adapter->addValidator('Size',FALSE,12800);
21     
22 //           //校验图片格式
23         $adapter->addValidator('Extension',false,array('jpg','gif','png','jpeg'));
24 //           //数据信息整理
$adapter->receive()

至此,今天的总结完毕。待以后复习使用。

 

posted on 2013-03-24 23:44  海角不转弯  阅读(301)  评论(0编辑  收藏  举报