今天完成了个人信息的更新及密码的修改。
主要还是针对昨天看到的知识点做些总结
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()
至此,今天的总结完毕。待以后复习使用。