• 技术文章 >后端开发 >php教程

    zendframework2数据库网关及分页简化

    PHP中文网PHP中文网2017-07-13 13:20:31原创710
    鉴于zendframework2在国内的教程比较少,本人有感而发,写下此篇关于zf2框架的技术文章,希望能帮助到需要的人。

    一、config\autoload\global.php

    <?php
    //php中文网 m.sbmmt.com
    return array(
        'db' => array(
                'driver' => 'pdo',
                'driver_options' => array(
                    \PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''
                )
        )
    );

    二、config\autoload\local.php

    <?php
    //php中文网 m.sbmmt.com
    return array(
        'db' => array(
            'dsn' => 'mysql:dbname=testdb;hostname=localhost',
            'username' => 'root',
            'password' => 'root',
            'prefix' => 'phpcn_'
        ),
    );

    三、module\Application\Module.php

    public function getServiceConfig()
    {
        return array(
                      'factories'=>array(
                                'Application\Model\Db'=>function($sm){
                                                            $service=new Model\Db($sm);
                                                            return $service;
                                },
                                'Db\Adapter'=>function($sm){
                                                            $configs=$sm->get('Config');
                                                            $adapter = new \Zend\Db\Adapter\Adapter($configs['db']);
                                                            return $adapter;
                                },
                                'Db\Feature'=>function($sm){
                                                            $configs=$sm->get('Config');
                                                            $Feature=new \Application\Model\TableNamePrefixFeature($configs['db']['prefix']);
                                                            return $Feature;
                                },
                                'Db\Padapter'=>function($sm){
                                                            $Padapter=new \Zend\Paginator\Adapter\DbSelect($sm->get('Application\Model\Db')->select,$sm->get('Db\Adapter'));
                                                            return $Padapter;
                                },
                                'Db\Paginator'=>function($sm){
                                                            $Paginator=new \Zend\Paginator\Paginator($sm->get('Db\Padapter'));
                                                            return $Paginator;
                                },
                    ),
                      'abstract_factories'=>array('Application\Services\CommonDbAbstractFactory')
        );
    }

    四、module\Application\view\pagination\tmpl.phtml

    <?php if ($this->pageCount): ?>
        <p class="pageX">
            <?php if (isset($this->previous)): ?>
                <a href="<?php echo $this->url().'?p='.$this->previous;?>">< 前一页</a> |
            <?php else: ?>
                <span>< 前一页</span> |
            <?php endif; ?>
            <?php foreach ($this->pagesInRange as $page): ?>
                <?php if ($page != $this->current): ?>
                    <a href="<?php echo $this->url().'?p='.$page;?>"><?php echo $page;?></a> |
                <?php else: ?>
                    <?php echo $page; ?> |
                <?php endif; ?>
            <?php endforeach; ?>
            <?php if (isset($this->next)): ?>
                <a href="<?php echo $this->url().'?p='.$this->next;?>">下一页 ></a>
            <?php else: ?>
                <span>下一页 ></span>
            <?php endif; ?>
        </p>
    <?php endif; ?>

    五、module\Application\src\Application\Services\CommonDbAbstractFactory.php

    <?php
    //php中文网 m.sbmmt.com
    namespace Application\Services;
    use Zend\ServiceManager\AbstractFactoryInterface;
    use Zend\ServiceManager\ServiceLocatorInterface;
    class CommonDbAbstractFactory implements AbstractFactoryInterface
    {
        public function canCreateServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
        {
            $a=explode(':',$name);
            if(!empty($a[0]) && $a[0]=='db'){
                return true;
            }
            return false;
        }
         
        public function createServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
        {
            $a=explode(':',$name);
            return $locator->get('Application\Model\Db')->get($a[1]);
        }
         
    }

    六、module\Application\src\Application\Model\Db.php

    <?php
    //php中文网 m.sbmmt.com
    namespace Application\Model;
    use Zend\Db\TableGateway\TableGateway;
    use Zend\ServiceManager\ServiceManager;
    class Db
    {
        public function construct(ServiceManager $sm){
            $this->sm=$sm;
        }
        public function get($tablename=null)
        {
            $configs=$this->sm->get('Config');
            $adapter=$this->sm->get('Db\Adapter');
            $dbFeature=$this->sm->get('Db\Feature');
            $this->db=new TableGateway($tablename,$adapter,$dbFeature);
            $this->select=$this->db->getSql()->select();
            return $this;
        }
        public function fetch(){
            return $this->db->selectWith($this->select);
        }
        public function getSql(){
            return $this->select;
        }
        public function getTableGateway(){
            return $this->db;
        }
        public function select($where = null){
            return $this->db->select($where);
        }
        public function insert($set){
            return $this->db->insert($set);
        }
        public function update($set, $where = null){
            return $this->db->update($set,$where);
        }
        public function delete($where){
            return $this->db->delete($where);
        }
        public function call($functionName,$args){
            $this->select=call_user_func_array(array($this->select,$functionName),$args);
            return $this;
        }
    }

    七、module\Application\src\Application\Model\TableNamePrefixFeature.php

    <?php
    //php中文网 m.sbmmt.com
    namespace Application\Model;
    use Zend\Db\TableGateway\Feature\AbstractFeature;
    class TableNamePrefixFeature extends AbstractFeature
    {
        protected $prefix=null;
        public function construct($prefix=null)
        {
            if(null!==$prefix) {
            $this->setPrefix($prefix);
            }
        }
        public function setPrefix($prefix)
        {
            $this->prefix=$prefix;
        }
        public function postInitialize()
        {
            if(null!==$this->prefix){
                $this->tableGateway->getSql()->setTable($this->prefix.$this->tableGateway->table);
            }
        }
    }

    八、module\Application\src\Application\Controller\IndexController.php

    $this->sm=$this->getServiceLocator();
    $this->model=$this->sm->get('db:model');
    $p=intval($this->getRequest()->getQuery('p',1));
    $per_page=1;
    $result=$this->model->where('id > 2')->order('id DESC')->limit($per_page)->offset(($p-1)*$per_page)->fetch()->toArray();
    $paginator=$this->sm->get('Db\Paginator');
    $paginator->setCurrentPageNumber($p);
    $paginator->setItemCountPerPage($per_page);
    \Zend\Debug\Debug::dump($result);
    echo $this->sm->get('ViewRenderer')->paginationcontrol($paginator, 'Sliding', 'pagination/tmpl.phtml');

    【本文由“Ty80账号”发布,2017年7月13日】

    以上就是zendframework2数据库网关及分页简化的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php 查看SSL证书信息的方法 下一篇:php arsort数组降序排序详细介绍_php实例
    VIP课程(WEB全栈开发)

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• PHP自动更新新闻DIY_PHP教程• 数据库相关问题_PHP教程• 新手配置 PHP 调试环境(IIS+PHP+MYSQL)• 很好用的PHP数据库类_php实例• FCKeditor的安装(PHP)_php技巧
    1/1

    PHP中文网