2013-12-21 53 views
0

我通過FuelPHP文檔搜索到但未找到cookie前綴配置。FuelPHP無法設置cookie前綴

我用這段代碼擴展了fuel/app/classes/extension/cookie.php中的類。

namespace Extension; 

class Cookie extends \Fuel\Core\Cookie 
{ 


    private static $config = array(
     'expiration'   => 0, 
     'path'     => '/', 
     'domain'    => null, 
     'secure'    => false, 
     'http_only'    => false, 
     'prefix' => '', // added prefix to cookie. 
    ); 


    public static function _init() 
    { 
     static::$config = array_merge(static::$config, \Fuel\Core\Config::get('cookie', array())); 
    } 


    public static function set($name, $value, $expiration = null, $path = null, $domain = null, $secure = null, $http_only = null) 
    { 
     // add prefix to cookie. 
     $prefix = ''; 
     is_null($prefix) and $prefix = static::$config['prefix']; 
     $name = $prefix . $name; 

     parent::set($name, $value, $expiration, $path, $domain, $secure, $http_only); 

    } 


} 

當我調用\ Extension \ Cookie :: set('name','value');它返回錯誤。

Cannot access private property Extension\Cookie::$config 
COREPATH/classes/cookie.php @ line 92 
Line 92 is_null($expiration) and $expiration = static::$config['expiration']; 

如何將cookie類擴展爲在set,get和delete上自動添加名稱前綴?

+0

現在我必須擴展和複製整套功能並修改它。我不喜歡這種方式,因爲當FuelPHP更新源代碼時,我必須再次複製和粘貼。 – vee

回答

2

這是一個錯字,在FuelPHP中,類屬性永遠不應該定義爲private,因爲這會干擾可擴展性,正如您已經注意到的那樣。

它已在當前的開發分支中得到糾正。

+0

我將我的擴展類屬性更改爲public,現在它工作正常。謝謝。 – vee

0

您不需要複製和粘貼任何代碼。您可以擴展所需的方法和做這樣的事情:

public static function set($name, $value, $expiration = null, $path = null, $domain = null, $secure = null, $http_only = null) 
{ 
    $name = '<my prefix here>' . $name; 
    parent::set($name, $value, $expiration, $path, $domain, $secure, $http_only); 
} 

前綴當然是使用你想要的任何方法加載的,您可以使用前綴以前綴添加到所需要的方法這種方法。

+0

無法訪問私有財產Extension \ Cookie :: $ config COREPATH/classes/cookie.php @ line 92 第92行is_null($ expiration)和$ expiration = static :: $ config ['expiration']; – vee

+0

以及你試圖訪問另一個類的私有屬性的錯誤,這是不允許的。我會假設基礎cookie類'$ config變量受到保護。你會想看看你正在擴展的類,看看是否有一種方法來獲得配置。 – Uru