2016-08-24 2 views
0

Вот мой код:Расширение конфигурации разрывает приложение

// Yoda namespace 
namespace Yoda\Application\Config\Feature; 

// use zend config 
use Zend\Config\Config; 

// CacheConfig class 
class CacheConfig extends Config 
{ 
    /** 
    * Default cache type for now 
    * 
    * @var string 
    */ 
    const DEFAULT_CACHE_TYPE = 'filesystem'; 

    /** 
    * Default cache ttl for now 
    * 
    * @var integer 
    */ 
    const DEFAULT_CACHE_TTL = 3600; 

    /** 
    * Constructor. Creates config data for caching 
    */ 
    public function __construct() 
    {    
     $config=[ 
      'name'=> static::DEFAULT_CACHE_TYPE, 
      'options' => [ 
       'ttl' => static::DEFAULT_CACHE_TTL, 
       'cache_dir' => '/var/www/html/yoda/data/cache' 
      ] 
     ]; 
     parent::__construct($config,true); 
    } 
} 

Когда я использую этот код перерывы приложения и говорит The localhost page isn't working однако, когда я просто передать массив конфигурации в стандартный Zend Config объекта он работает отлично.

Вот мой код использования:

  $config=[ 
       'name'=> 'filesystem', 
       'options' => [ 
        'ttl' => 3600, 
        'cache_dir' => '/var/www/html/yoda/data/cache' 
       ] 
      ];    
      //works fine 
      $configCache = new Config($config); 

      //breaks     
      $configCache = new CacheConfig(); 

Не уверен, что случилось здесь.

+0

'static ::' или 'self ::'? Я думаю, что ссылка на статические свойства должна быть 'self ::' – Kamran

+0

nope не решила – jkushner

ответ

0

Это потому, что в классе Config конструктор загружает статический экземпляр самого себя. Когда я сделал это:

public function __construct() 
{    
    $config=[ 
     'name'=> static::DEFAULT_CACHE_TYPE, 
     'options' => [ 
      'ttl' => static::DEFAULT_CACHE_TTL, 
      'cache_dir' => yoda::registry('cache_dir') 
     ] 
    ]; 
    $this->allowModifications = true;  
    foreach ($config as $key => $value) { 
     if (is_array($value)) { 
      $this->data[$key] = new Config($value, $this->allowModifications); 
     } else { 
      $this->data[$key] = $value; 
     } 
    } 
} 

Это похоже на работу, когда я заменить его Config

0

Вместо изменения класса Зенд конфигурации вы можете сделать следующее в конструкторе configCache. Когда класс конфигурации вызовет класс кеша с массивом, вы передаете элемент управления обратно в класс конфигурации с принятым массивом. Затем он правильно установит объект конфигурации. Ошибка связана с Static Bindings.

/** 
    * Constructor. Creates config data for caching 
    */ 
    public function __construct($arr = []) 
     {  
      $config=[ 
       'name'=> static::DEFAULT_CACHE_TYPE, 
       'options' => [ 
        'ttl' => static::DEFAULT_CACHE_TTL, 
        'cache_dir' => '/var/www/html/yoda/data/cache' 
       ] 
      ]; 
      if (count($arr) > 0) 
      { 
       parent::__construct($arr,true); 
      } 
      else 
      { 
       parent::__construct($config,true); 
      } 
     } 

    $configCache = new CacheConfig(); 
    print_r($configCache); 
Смежные вопросы