passerelle de base de données zendframework2 et simplification de la pagination

PHP中文网
Libérer: 2023-03-13 19:30:02
original
1731 Les gens l'ont consulté

Compte tenu du fait que zendframework2 dispose de relativement peu de tutoriels en Chine, j'ai eu l'idée d'écrire cet article technique sur le framework zf2, dans l'espoir d'aider ceux qui en ont besoin.

1. configautoloadglobal.php

<?php
//php中文网 www.php.cn
return array(
    &#39;db&#39; => array(
            &#39;driver&#39; => &#39;pdo&#39;,
            &#39;driver_options&#39; => array(
                \PDO::MYSQL_ATTR_INIT_COMMAND => &#39;SET NAMES \&#39;UTF8\&#39;&#39;
            )
    )
);
Copier après la connexion

2. configautoloadlocal.php

<?php
//php中文网 www.php.cn
return array(
    &#39;db&#39; => array(
        &#39;dsn&#39; => &#39;mysql:dbname=testdb;hostname=localhost&#39;,
        &#39;username&#39; => &#39;root&#39;,
        &#39;password&#39; => &#39;root&#39;,
        &#39;prefix&#39; => &#39;phpcn_&#39;
    ),
);
Copier après la connexion

3. 🎜>
4. moduleApplicationviewpaginationtmpl.phtml

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


5. moduleApplicationsrcApplicationServicesCommonDbAbstractFactory.php

<?php if ($this->pageCount): ?>
    <p class="pageX">
        <?php if (isset($this->previous)): ?>
            <a href="<?php echo $this->url().&#39;?p=&#39;.$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().&#39;?p=&#39;.$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().&#39;?p=&#39;.$this->next;?>">下一页 ></a>
        <?php else: ?>
            <span>下一页 ></span>
        <?php endif; ?>
    </p>
<?php endif; ?>
Copier après la connexion


6. php

<?php
//php中文网 www.php.cn
namespace Application\Services;
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class CommonDbAbstractFactory implements AbstractFactoryInterface
{
    public function canCreateServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
    {
        $a=explode(&#39;:&#39;,$name);
        if(!empty($a[0]) && $a[0]==&#39;db&#39;){
            return true;
        }
        return false;
    }
     
    public function createServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
    {
        $a=explode(&#39;:&#39;,$name);
        return $locator->get(&#39;Application\Model\Db&#39;)->get($a[1]);
    }
     
}
Copier après la connexion


7. moduleApplicationsrcApplicationModelTableNamePrefixFeature.php

<?php
//php中文网 www.php.cn
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(&#39;Config&#39;);
        $adapter=$this->sm->get(&#39;Db\Adapter&#39;);
        $dbFeature=$this->sm->get(&#39;Db\Feature&#39;);
        $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;
    }
}
Copier après la connexion


8. moduleApplicationsrcApplicationControllerIndexController.php

<?php
//php中文网 www.php.cn
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);
        }
    }
}
Copier après la connexion


【Cet article est écrit par "Compte Ty80" sorti le 13 juillet 2017]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!