下面创建一个链接数据库的开发实例

来源:互联网 发布:淘宝联盟的发单机器人 编辑:程序博客网 时间:2024/05/17 07:31

1、创建controller - IndexController.php

<?php/* * To change this template, choose Tools | Templates * and open the template in the editor. */namespace home\Controller;use Zend\Mvc\Controller\AbstractActionController;use Zend\View\Model\ViewModel;use home\Model\Artical;use home\Form\ArticalForm;use Zend\Session\SessionManager as Zend_Session_SessionManager;class  IndexController extends AbstractActionController{       protected  $articalModel;    public function getArticalModel()    {        if (!$this->articalModel) {            $this->articalModel = $this-> getServiceLocator() ->get('home\Model\ArticalModel');        }        return $this->articalModel;    }            public function indexAction(){        $form = new ArticalForm();        $form ->get('submit')->setAttribute('value', '提交');        $request = $this->getRequest();        if($request -> isPost()){            $artical = new Artical();            $form ->setInputFilter($artical -> getInputFilter());            $form ->setData($request->getPost());            if($form ->isValid()){                $artical -> exchangeArray($form -> getData());                $this->getArticalModel()->saveArtical($artical);                return $this->redirect()->toRoute();            }        }        $where = array();        $order = array();        $count =$this-> getArticalModel() -> getCount();        $pagesize = 10;        $nowpagenum = isset($_REQUEST['page']) ? $_REQUEST['page'] : 1 ;        $page = $this->PageNum($count, $pagesize ,$nowpagenum);        $limit = array('limit' => ($nowpagenum-1)*$pagesize.','.$pagesize);        $list = $this->getArticalModel() ->fetchAll($where,$order,$limit);        return array(            'form' => $form,            'list' => $list,            'page' => $page,        );    }    }
2、创建FORM表单相关内容 -ArticalForm.php

<?php/* * To change this template, choose Tools | Templates * and open the template in the editor. */namespace home\Form;use Zend\Form\Form;class ArticalForm extends Form{        public function __construct($name=null){                parent::__construct('artical');                $this->setAttribute('method', 'post');                $this->add(array(            'name' => 'id',            'attributes' => array(                'type' => 'hidden',            ),        ));                $this->add(array(            'name' => 'title',            'attributes' => array(                'type' => 'text',            ),            'options' => array(                'label' => '标题',            ),        ));                $this->add(array(            'name' => 'content',            'attributes' => array(                'type'  => 'text',            ),            'options' => array(                'label' => '内容',            ),        ));                $this->add(array(            'name' => 'submit',            'attributes' => array(                'type'  => 'submit',                'value' => '提交',                'id' => 'submitbutton',            ),        ));            }    }?>

3、创建Model-Artical.php以及数据库操作Model-ArticalModel.php

Artical.php代码如下:

<?phpnamespace home\Model;use Zend\InputFilter\InputFilter;use Zend\InputFilter\Factory as InputFactory;use Zend\InputFilter\InputFilterAwareInterface;use Zend\InputFilter\InputFilterInterface;class Artical implements InputFilterAwareInterface{        public $id;    public $titile;    public $content;        protected $inputFilter;        public function exchangeArray($data){        $this->id = (isset($data['id'])) ? $data['id'] : null;        $this->title = (isset($data['title'])) ? $data['title'] : null;        $this->content = (isset($data['content'])) ? $data['content'] : null;    }        public function getArrayCopy(){        return get_object_vars($this);    }        public function setInputFilter(InputFilterInterface $inputFilter){        throw new Exception('Not Used!');    }        public function getInputFilter(){        if(!$this->inputFilter){            $inputFilter = new InputFilter();            $factory =new InputFactory();            $inputFilter ->add($factory ->createInput(array(                'name' => 'id',                'required' => true,                'filters' => array(                    array('name' => 'Int'),                )            )));            $inputFilter ->add($factory ->createInput(array(                'name' => 'title',                'required' => true,                'filters' => array(                    array('name' => 'StripTags'),                    array('name' => 'StringTrim'),                ),                'validators' => array(                    array(                        'name' => 'StringLength',                        'options' => array(                            'encoding' => 'UTF-8',                            'min' => 1,                            'max' => 100,                        ),                    ),                ),            )));            $inputFilter ->add($factory ->createInput(array(                'name' => 'content',                'required' => true,                'filters' => array(                    array('name' => 'StripTags'),                    array('name' => 'StringTrim'),                ),                'validators' => array(                    array(                        'name' => 'StringLength',                        'options' => array(                            'encoding' => 'UTF-8',                            'min' => 1,                        ),                    ),                ),            )));            $this->inputFilter = $inputFilter;        }        return $this->inputFilter;    }    }?>

ArticalModel.php代码如下:

<?phpnamespace home\Model;use Zend\Db\TableGateway\AbstractTableGateway;use Zend\Db\Adapter\Adapter;use Zend\Db\ResultSet\ResultSet;class ArticalModel extends AbstractTableGateway{        protected $table = 'artical';        public function __construct(Adapter $adapter){        $this -> adapter = $adapter;        $this -> resultSetPrototype = new ResultSet();        $this -> resultSetPrototype -> setArrayObjectPrototype(new Artical());        $this -> initialize();    }        public function fetchAll($where,$order,$limit){        $resultSet = $this -> dbSelect($where,$order,$limit);        return $resultSet;    }        public function getCount(){        $result =  $this->dbCount();        return $result[0];    }        public function getArtical($id){        $id = (int) $id;        $rowSet = $this -> select(array('id'=>$id));        $rows = $rowSet -> current();        if(!$rows){            throw new Exception("Could not find row {$id}");        }        return $rows;    }        public function saveArtical(Artical $artical){        $data = array(            'title' => $artical -> title,            'content' => $artical -> content        );        $id = (int) $artical -> id;        if($id == 0){            $this->insert($data);        }else{            if($this->getArtical($id)){                $this->update($data,array('id'=>$id));            }else{                throw new Exception('Form Id is not find!');            }        }    }        public function deleteArtical($id){        $this->delete(array('id'=>$id));    }        public function count(){            }    }?>

4、view部分

zf生成表单部分:

<?php    $form = $this -> form ;    $form ->setAttribute('action', $this -> url('home',array('action' => 'index')));    $form ->prepare();    echo $this->form()->openTag($form);    echo $this->formHidden($form->get('id'));    echo $this->formRow($form->get('title'));    echo $this->formRow($form->get('content'));    echo $this->formInput($form->get('submit'));    echo $this->form()->closeTag($form);?>

页面显示部分:

<?php    echo '<table>';     echo '<tr><th>序号</th><th>标题</th><th>内容</th></tr>';    for($i=0;$i<count($this->list);$i++){        echo '<tr><td>'.$this->list[$i][0].'</td><td>'.$this->list[$i][1].'</td><td>'.$this->list[$i][2].'</td></tr>';    }    echo  '</table>';    echo $this->page;?>

5、模块根目录下Module.php配置部分:

<?php/** * @todo 配置该模块中使用到得数据库模型 * @return String $table */namespace home;use home\Model\ArticalModel;class Module{    public function getAutoloaderConfig()    {        return array(            'Zend\Loader\ClassMapAutoloader' => array(                __DIR__ . '/autoload_classmap.php',            ),            'Zend\Loader\StandardAutoloader' => array(                'namespaces' => array(                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,                ),            ),        );    }        public function getServiceConfig()    {        return array(            'factories' => array(                'home\Model\ArticalModel' =>  function($sm) {                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');                    $table = new ArticalModel($dbAdapter);                    return $table;                },            ),        );    }        public function getConfig()    {        return include __DIR__ . '/config/module.config.php';    }    }

由此就完成了一个链接数据库的发布文章的ZF开发实例。

0 0
原创粉丝点击