这是我最近两三周做的一个Post模块,从数据库到后台,前台,数据库设计和总体设计都已经给我了,我也参考了不少已有模块的代码。刚开始7天,我用来实现post模块的增删改查的基本功能,之后的时间,就是修改一些逻辑代码,以及增添新功能,就像小结12里面写的ajax功能之类的。
先给出这个module的整个代码框架吧:
列出来的代码文件就是我所用到的代码,其中有些abstract为空,因为直接继承了其他的类。
Controller里面就是主要的action,在设置了路由文件之后,在controller里面写出相应的action,在action中完成对前台的传参,设置相应的template等。
Form里面就是在需要输入数据,添加数据时,所用的表格,里面有详细的label参数,下图就是基于PostAddForm的。
Model就是数据库中对应的参数,在这边定义清楚。
Table是对数据库进行操作的各种方法,这边参考了不少Zend Framework官网给出的Db方法,不是很难。在action里面通过getTable调用这些方法。
接下来就是相应的页面文件了。post文件夹中是大体的页面框架文件,具体的小文件部分在ctrl中,基本可以传个partial到post大页面中去。
这边我把controller里面,两个稍微重要的方法贴出来。贴多了,以后自己看,估计也不知所云。
public function PostAction(){
if(!$this->userHasPermission('ADMIN', 'VIEW_PRODUCT'))
{
return $this->requirePermission('ADMIN', 'VIEW_PRODUCT');
}
$page = $this->getRequest()->getQuery('page', 1);
$condition = array();
$type_name = 'post';
if(isset($_GET['post_status']) && $_GET['post_status'] != 'null') {
$status = $_GET['post_status'];
$condition['post_status'] = (int)$_GET['post_status'];
}else{
$condition['post_status'] = null;
}
if(isset($_GET['query'])) {
$condition['title'] = $_GET['query'];
}
else{
$condition['title'] = null;
}
if(isset($_GET['category'])) {
$condition['category'] = $_GET['category'];
}
else{
$condition['category'] = null;
}
if(isset($_GET['author'])) {
$condition['author'] = $_GET['author'];
}
else{
$condition['author'] = null;
}
$posts = $this->getPostTable()->getPaginator($condition);
$posts->setItemCountPerPage(10);
$posts->setCurrentPageNumber($page);
$vm = new ViewModel(array(
'post_paginator' => $posts,
));
$vm->setTemplate('post/post-index');
$this->layout()->selectedTab = 'post-list';
return $vm;
}
public function addPostAction(){
if(!$this->userHasPermission('ADMIN', 'VIEW_PRODUCT'))
{
return $this->requirePermission('ADMIN', 'VIEW_PRODUCT');
}
$user_service = $this->getServiceLocator()->get('UserService');
$table = $this->getPostTable();
$config = $this->getServiceLocator()->get('config');
$sm = $this->getServiceLocator();
$request = $this->getRequest();
$form = new \Post\Form\PostAddForm(array(
'adapter' => $sm->get('Zend\Db\Adapter\Adapter'),
'user_service' => $user_service,
));
$author_valid = true;
if($request->isPost())
{
$form->setData($request->getPost());
if ($form->isValid()) {
$post_array = array();
$post = new Post($this->getRequest()->getPost()->toArray());
$user = $this->getServiceLocator()->get('UserService')->getUserById($post->author_id);
if ($user) {
$author = $user->username;
}
else
$author = null;
foreach ($post as $key => $value) {
if ($key == 'post_featured_img') {
$json_arr = json_decode($value,true);
$value = '/img'. '/' . substr($json_arr['name'],0,6) . '/' . $json_arr['name'] . '.' . $json_arr['type'];
}
$post_array[$key] = $value;
}
$post_array['author'] = $author;
if (is_null($post_array['author'])) {
$author_valid = false;
}else{
$postId = $table->addPost($post_array);
$this->redirect()->toUrl("/post");
}
}
}
在代码中可以看出,关于图片是使用Json数组返回的,这是代码库里原来就封装好的Image Element的返回值,感觉很方便。
估计接下来,还得继续改改这个模块,刚开始做的时候,财哥跟我讲这个,我觉得很抽象,根本想象不出来这个怎么做,现在做出来,功能也都实现了,感觉蛮有成就感的,在博客里面算是纪念一下,这两周来,这个module给我带来的好坏心情吧。