ins0/zf2-snippster

ZF2 Snipped 模块,用于生成大量视图作为片段,降低应用响应时间

dev-master 2014-10-15 12:11 UTC

This package is auto-updated.

Last update: 2024-09-11 17:05:10 UTC


README

ZF2 模块,将大量视图保存为预渲染的片段到缓存中,降低应用请求响应时间

待办事项

  • 测试
  • 视图助手
  • 控制器助手

快速开始

通过 Composer 安装

composer.json 文件的 require 键中添加以下内容

"ins0/zf2-snippster": "dev-master"

运行 Composer update 命令

$ composer update

缓存适配器

编辑 module.config.php 来设置您首选的缓存适配器,snippster 与 redis 或 memcache 配合得很好

'snippster_configuration' => array(
    'cache' => array(
        'adapter' => 'Zend\Cache\Storage\Adapter\Redis',
        'options' => array(
            'server' => array(
                'host' => '127.0.0.1',
                'port' => 6379,
            )
        )
    ),
),

示例

创建一个 zf2 控制台路由,并将 crontab 指向该路由以预生成应用中使用的所有视图

生成片段

config.module.php

'view_manager' => array(
  'template_map' => array(
      'snippster-product-list-item' => __DIR__ . '/../view/snippster/example/product/list-item.phtml',
  )
)

ConsoleExampleController.php

function snippsterCreateExampleProductViews()
{
    /** @var \Snippster\Service\Snippster $snippster */
    $snippster = $this->getServiceLocator()->get('Snippster');

    $products = array(
        array('id' => 1, 'name' => 'Test Product1'),
        array('id' => 2, 'name' => 'Test Product2'),
        array('id' => 3, 'name' => 'Test Product3'),
        array('id' => 4, 'name' => 'Test Product4'),
        array('id' => 5, 'name' => 'Test Product5'),
        array('id' => 6, 'name' => 'Test Product6'),
    );

    foreach($products as $product)
    {
        $viewSnippet = new \Snippster\Entity\ViewSnippet('product-list-item', $product['id']);
        $viewSnippet->setTemplate('snippster-product-list-item');
        $viewSnippet->setVariables($product);

        $snippster->saveViewSnippet($viewSnippet);
    }
}

snippster/example/product/list-item.phtml

<div class="product">
    <h1><?php echo $this->escapeHtml($this->name); ?>
    <hr>
    More heavy stuff to build this view
</div>

请求片段

控制器请求视图片段示例

function productListAction()
{
    /** @var \Snippster\Service\Snippster $snippster */
    $snippster = $this->getServiceLocator()->get('Snippster');

    $html = $snippster->getViewSnippet('product-list-item', 4);
    // get pre rendered product html - do stuff
}