Yii рдЖрдкрдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рд╕реАрдзреЗ рд▓реМрдЯреЗ рд╕рд░рдгреА рдХреЗ рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ рдХреИрд╢ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдФрд░ рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд┐рд░реНрднрд░рддрд╛рдПрдВ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрдирдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдирд┐рд░реНрднрд░рддрд╛ рдЖрдкрдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЯреНрд░реИрдХ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ (рдореЗрд░рд╛ рдорддрд▓рдм рд╣реИ CDbCacheD dependency), рдЬреЛ рд▓реЛрдб рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╡реНрдпрд░реНрде рд╣реИред
рдРрд╕реА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рддрдерд╛рдХрдерд┐рдд рдЯреИрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдЖрдпрд╛ рдерд╛ред рдпрд╛рдиреА рдХреБрдЫ рдЯреИрдЧ рдмрдирд╛рдП рдЧрдП рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝реЗ рд╕рднреА рдХреИрд╢ рдХреЗ рд╕рд╛рде рд╕рд╣реЗрдЬреЗ рдЧрдП рд╣реИрдВред рдФрд░ рдЬреИрд╕реЗ рд╣реА рдпрд╣ рдмрджрд▓рддрд╛ рд╣реИ, рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдХреИрд╢ рдХреЛ рд░рд┐рдмреВрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ Yii рдореЗрдВ рдирд┐рдХрд▓рд╛, рдпрд╣ рдмрд╣реБрдд рд╕рд░рд▓рддрд╛ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╣реИ рдХрд┐ рдЕрдзрд┐рдХ рдЖрд░рд╛рдо рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдЗрд╕ рддрд░рд╣ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдмрдирд╛рдПрдВ рдФрд░ рдЗрд╕реЗ рд╕рд╣реЗрдЬреЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдШрдЯрдХреЛрдВ рдореЗрдВ:
class CTagCacheDependency extends CCacheDependency { public $tag; public $cache; public $cacheName; public function __construct($tag=null, $cacheName='cache') { $this->tag=$tag; $this->cacheName = $cacheName; } protected function generateDependentData() { if($this->tag!==null) { $this->cache = Yii::app()->getComponent($this->cacheName); $t = $this->cache->get($this->tag); if ($t === false) { $t = microtime(true); $this->cache->set($this->tag, $t); } return $t; } } }
рдореЙрдбрд▓ рдореЗрдВ, рд╣рдо рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдирдИ рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрдм рдХрд░реЗрдВрдЧреЗред рдЪреВрдБрдХрд┐ рд╣рдо рдЗрд╕реЗ рдкреВрд░реЗ рдореЙрдбрд▓ рдХреЗ рд▓рд┐рдП рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ,
рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ:
protected function beforeFind() { $this->cache(30, new CTagCacheDependency(get_class($this))); parent::beforeFind(); }
рдареАрдХ рд╣реИ, рдпрд╛ рдЬрд╣рд╛рдБ рднреА рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╣рд╛рдБ рдореБрдЦреНрдп рдмрд╛рдд рд╣реИ "$ рдпрд╣-> рдХреИрд╢ (30, рдирдпрд╛ CTagCacheD dependency (get_class (рдпрд╣ $)));")
- 30 - рдХреИрд╢ рд╕реНрдЯреЛрд░реЗрдЬ рд╕рдордп, рд▓реЗрдХрд┐рди рдЗрд╕ рдореВрд▓реНрдп рдХреЛ рдПрдХ рдЪрд░ рдореЗрдВ рд░рдЦрдирд╛ рдмреЗрд╣рддрд░ рд╣реИ
- CTagCacheD рдирд┐рд░реНрднрд░рддрд╛ - рд╣рдорд╛рд░реЗ рдирдП рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рд╡рд░реНрдЧ
- get_class (рдпрд╣ $) - рдЯреИрдЧ рдирд╛рдо - рдореЙрдбрд▓ рдирд╛рдо
рдПрдХ рдЯреИрдЧ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдХрдХреНрд╖рд╛ рдХрд╛ рдирд╛рдо рд╣реИ, рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдЬреБрдбрд╝рд╛ рдореЙрдбрд▓ред
рдареАрдХ рд╣реИ, рдЬрдм рд╣рдо рдХреБрдЫ рд╣рдЯрд╛рддреЗ рд╣реИрдВ рдпрд╛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рд╣реА рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд▓рд┐рдЦрддреЗ рд╣реИрдВ (рдмрд╛рдж рдореЗрдВ, рдмрд╛рдж рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░реЗрдВ):
Yii::app()->cache->set(get_class($this), microtime(true), 0);
- 0 - рдЕрдирдВрдд рднрдВрдбрд╛рд░рдг
- get_class (рдпрд╣ $) - рдЯреИрдЧ рдирд╛рдо - рдореЙрдбрд▓ рдирд╛рдо
- microtime (рд╕рдЪ) - рдирдпрд╛ рдЯреИрдЧ рдорд╛рди
рдЬрд┐рд╕рд╕реЗ рд╣рдо рдЗрд╕ рдореЙрдбрд▓ рд╕реЗ рдЬреБрдбрд╝реЗ рдЯреИрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рддрджрдиреБрд╕рд╛рд░ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рдеред рдЕрдм, рдЬрдм рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЯреИрдЧ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕ рдЯреИрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕рднреА рдХреИрд╢ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдХреИрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдШрдЯрдХ: рдХреИрд╢ред рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреЗ рдЕрдиреНрдп рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рд╣рд┐рддреНрдп:
UPD рдорд╣рддреНрд╡рдкреВрд░реНрдг!рдЕрдкрдбреЗрдЯреЗрдб рдХреЛрдб рдХреЛрдб
CTagCacheD рдирд┐рд░реНрднрд░рддрд╛рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдЕрдм рдШрдЯрдХ рдХреЗ рдирд╛рдо рдХреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
$this->cache($duration, new CTagCacheDependency(get_class($this), 'cache'));
рдореЗрдордХреЗрдЪ рдХреЗ рд╕рд╛рде рдЧрд▓рдд рдХрд╛рдо рдХреЗ рдХрд╛рд░рдг рдмрдирд╛рдпрд╛ рдЧрдпрд╛ред