2015-03-22 4 views
0

Я сделал помощник представления, который проверяет, существует ли внешний URL перед его выходом. Некоторые из этих URL-адресов находятся в моем основном макете, поэтому проверка довольно замедляет мой сайт, вызывая все эти URL-адреса все время, чтобы проверить, существуют ли они. Я хотел бы сохранить вывод этой функции, чтобы он проверял только URL-адрес, если тот же самый не был проверен уже менее чем за час или день. Я считаю, что я должен использовать Zend Cache для этого? Но я понятия не имею, с чего начать, есть ли у вас какие-либо предложения, простые решения или какой-то базовый учебник для изучения? Благодаря!ZF2 - Сохранение результата функции в кеше

ответ

2

Добавить глобальную конфигурацию для службы кэша, как here:

конфигурация/автозагрузка/global.php

'service_manager' => array(
    'abstract_factories' => array(
      'Zend\Cache\Service\StorageCacheAbstractServiceFactory', 
    ) 
), 

конфигурация/автозагрузки/cache.global.php

return array(
    'caches' => array(
     // Cache config 
    ) 
) 

Используйте фабрику, чтобы создать свою Просмотреть Помощник:

Применение/module.php :: getViewHelperConfig()

'LinkHelper' => function ($sm) { 
    $locator = $sm->getServiceLocator(); 
    return new LinkHelper($locator->get('memcached')) 
} 

Использование кэша службы в вашем View Helper:

LinkHelper.php

protected $cache; 

public function __construct($cache) 
{ 
    $this->cache = $cache; 
} 

public function __invoke($url) 
{ 
    $cacheKey = md5($url); 

    if ($this->cache->hasItem($cacheKey) { 
     return $this->cache->getItem($cacheKey); 
    } 

    $link = ''; // Parse link 
    $this->cache->setItem($cacheKey, $link); 

    return $link; 
} 
+0

Я получил эту ошибку (Я выполнил вашу инструкцию и использовал связанную конфигурацию): исключить исключение «Zend \ Cache \ Exception \ ExtensionNotLoadedException» с сообщением 'Need ext/memcached version> = 1.0.0' – Aise

+1

Если у вас нет 'memcached', вы можете просто использовать кеш' filesystem'. Пример конфигурации вы можете увидеть здесь (http://stackoverflow.com/a/18597132/1129939). И не забудьте сделать каталог 'data/cache' доступным для записи! –

+0

Отлично! Похоже, ошибок нет, но как я могу проверить, действительно ли это работает? – Aise

 Смежные вопросы

  • Нет связанных вопросов^_^