让 Zend Framework 2 Memcached 工作
Posted
技术标签:
【中文标题】让 Zend Framework 2 Memcached 工作【英文标题】:Getting Zend Framework 2 Memcached working 【发布时间】:2013-03-25 22:39:30 【问题描述】:我正在尝试创建一个新的(已配置并可以使用)Zend\Cache\Storage\Adapter\Memcached
并收到错误:
文件:[项目]/vendor/zendframework/zendframework/library/Zend/Cache/Storage/Adapter/MemcachedResourceManager.php:52 消息:没有 ID 为“默认”的资源
Module
类
class Module implements ConfigProviderInterface, ServiceProviderInterface, AutoloaderProviderInterface
...
public function getServiceConfig()
try
return array (
'factories' => array(
...
'Cache\Adapter\Memcached' => function ($serviceManager)
$memcached = new Memcached($serviceManager->get('Cache\Adapter\MemcachedOptions'));
return $memcached;
,
'Cache\Adapter\MemcachedOptions' => function ($serviceManager)
return new MemcachedOptions(array(
'ttl' => 60 * 60 * 24 * 7, // 1 week
'namespace' => 'cache_listener',
'key_pattern' => null,
'readable' => true,
'writable' => true,
'servers' => 'localhost',
));
,
'Search\Model\CityStorage' => function ($serviceManager)
return new CityStorage(
$serviceManager->get('Search\Model\CityTable'),
$serviceManager->get('Cache\Adapter\Memcached')
);
)
);
...
...
Controller
类
class SearchController extends AbstractActionController
...
public function searchCoursesAction()
...
return new ViewModel(array(
...
'cities' => $this->getServiceLocator()->get('Search\Model\CityStorage')->getCities(),
));
...
Storage
类
<?php
namespace Search\Model;
use Zend\Cache\Storage\Adapter\AbstractAdapter;
use Search\Model\CityTable;
class CityStorage
/**
* @var CityTable
*/
private $cityTable;
/**
* @var AbstractAdapter
*/
private $cacheAdapter;
public function __construct(CityTable $cityTable, AbstractAdapter $cacheAdapter)
$this->cityTable = $cityTable;
$this->cacheAdapter = $cacheAdapter;
$this->cacheCities();
public function getCities()
if (!$this->cacheAdapter->hasItem('cities'))
$this->cacheCities();
return $cacheAdapter->getItem('cities');
private function cacheCities()
// $cities = $this->cityTable->fetchAll()->toArray();
// $this->cacheAdapter->setItem('cities', $cities);
$this->cacheAdapter->setItem('test', 123);
如何让它工作?
提前谢谢你!
编辑:
我已经使用设置servers
完成了MemcachedOptions
(见上文)。现在可以了!
注意:servers
而不是server
,因为Zend\Cache\Storage\Adapter\MemcachedOptions
类中没有方法setServer()
,而只有setServers()
:
文件:/var/www/itt/unisportr-zf/vendor/zendframework/zendframework/library/Zend/Stdlib/AbstractOptions.php:85 消息:选项“服务器”没有必须定义的匹配 setServer 设置方法
【问题讨论】:
【参考方案1】:正如您已经指出的,您必须定义一个资源 - 表示基本的 \Memcached
实例或自动实例化资源的选项之一。 (请查看Zend\Cache\Storage\Adapter\MemcachedResource
)
... 这样做的原因是在不同的存储适配器实例上共享一个或多个 \Memcached
资源。
还请注意,AbstractAdapter
不是类型提示的标记 - 您应该通过 StorageInterface 输入提示;)
【讨论】:
以上是关于让 Zend Framework 2 Memcached 工作的主要内容,如果未能解决你的问题,请参考以下文章
带有 Zend Framework 2 模块的 PHPUnit
有没有办法让文件上传输入匹配 Zend Framework 中的 dijit 主题?
如何让 Assetic 在 Windows 上的 Zend Framework 上编译 SCSS?