Heim > Backend-Entwicklung > PHP-Tutorial > zendframework2 Datenbank-Gateway und Paging-Vereinfachung

zendframework2 Datenbank-Gateway und Paging-Vereinfachung

PHP中文网
Freigeben: 2023-03-13 19:30:02
Original
1784 Leute haben es durchsucht

Angesichts der Tatsache, dass es in China relativ wenige Tutorials für zendframework2 gibt, wurde ich dazu inspiriert, diesen technischen Artikel über das zf2-Framework zu schreiben, in der Hoffnung, den Bedürftigen zu helfen.

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;
            )
    )
);
Nach dem Login kopieren

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;
    ),
);
Nach dem Login kopieren

3. ModulApplicationModule.php

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;)
    );
}
Nach dem Login kopieren

4. moduleApplicationviewpaginationtmpl.phtml

<?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; ?>
Nach dem Login kopieren

5. moduleApplicationsrcApplicationServicesCommonDbAbstractFactory.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]);
    }
     
}
Nach dem Login kopieren

6. moduleApplications rcApplicationModelDb. 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;
    }
}
Nach dem Login kopieren

7. moduleApplicationsrcApplicationModelTableNamePrefixFeature.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);
        }
    }
}
Nach dem Login kopieren

8. moduleApplicationsrcApplicationControllerIndexController.php

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

[Dieser Artikel wurde von „Ty80 Account“ geschrieben, veröffentlicht am 13. Juli 2017]

Das obige ist der detaillierte Inhalt vonzendframework2 Datenbank-Gateway und Paging-Vereinfachung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage