4

新しい(構成済みですぐに使用できる)を作成しようとするとZend\Cache\Storage\Adapter\Memcached、エラーが発生します:

ファイル: [project]/vendor/zendframework/zendframework/library/Zend/Cache/Storage/Adapter/MemcachedResourceManager.php:52 メッセージ: ID 'default' のリソースがありません

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);
    }

}

それを機能させる方法は?

前もって感謝します!

編集:

MemcachedOptions以上で設定は完了ですservers(上記参照)。今それは動作します!

注:メソッドはなく、クラス内にのみ存在するため、 ではありserversません。serversetServer()setServers()Zend\Cache\Storage\Adapter\MemcachedOptions

ファイル: /var/www/itt/unisportr-zf/vendor/zendframework/zendframework/library/Zend/Stdlib/AbstractOptions.php:85 メッセージ: オプション "server" には、定義する必要がある一致する setServer セッター メソッドがありません

4

1 に答える 1