ZF + рдореЗрдордХрд╛рдЯреЗрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреИрд╢рд┐рдВрдЧ рдФрд░ рдЯреИрдЧ

рдкреНрд░рд╕реНрддрд╛рд╡рдирд╛


Zend рдлреНрд░реЗрдорд╡рд░реНрдХ + рдореЗрдореНрдХреЗрдЪреНрдб рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╡рд┐рдХрд╛рд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рджреМрд░рд╛рди, рдХрднреА-рдХрднреА рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреА рдореМрдЬреВрджрд╛ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдФрд░ рдХреБрдЫ рд╕реАрдорд╛рдУрдВ рдХреЗ рджреЛрдиреЛрдВ (рдЕрддреНрдпрдзрд┐рдХ) рдмрд╣реБрддрд╛рдпрдд рд╕реЗ рд╕рд╛рдордирд╛ рд╣реЛрддрд╛ рд╣реИред рдореИрдВ рдЗрдирдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рдорд▓реЗ рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдП рдЧрдП рд╕рдорд╛рдзрд╛рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ред

рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ, Memcached рд╕рд░рд▓, рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЗ рд╕рд╛рде рдХреБрдВрдЬреА / рдорд╛рди рднрдВрдбрд╛рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд╕рд░рд▓ рд╣реИред рдореЗрдо рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЗрдбрдПрдл рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдХреИрд╢ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдЗрд╕рдореЗрдВ рд╕реНрдХреНрд▓рд╛рдЗрдЯ, рдПрдХреНрд╕рдЪреЗ, рдЬрд╝реЗрдВрдбрд░рд╕реЗрд╡рд░, рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдПрдбреЗрдкреНрдЯрд░ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИрдВ)ред рдЗрди рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдореЛрдВ рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреИрд╢реНрдб рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдЯреИрдЧ рдХреЗ рдЙрдкрдпреЛрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореЗрдореНрдХреЗрдб рдореЗрдВ рдРрд╕рд╛ рдХреЛрдИ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореЗрдореЗрдХреИрдЪреНрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдХреИрд╢рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ ZF рд╡рд░реНрдЧ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдЕрдкрд╡рд╛рджреЛрдВ рддрдХ рдХреЗрд╡рд▓ рддреНрд░реБрдЯрд┐рдпреЛрдВ (рд▓реЙрдЧреНрд╕) рдореЗрдВ рд▓реЗ рдЬрд╛рдПрдЧрд╛ред (рдЖрдк рдкреНрд░рд▓реЗрдЦрди рдореЗрдВ рдЕрдзрд┐рдХ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ)ред



рд╡рд┐рдХрд╛рд╕ рдореЗрдВ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрд░реНрдереЛрдВ рдореЗрдВ рдХреИрд╢ рдХрд╛ "рд╕реНрдорд╛рд░реНрдЯ" рдЙрдкрдпреЛрдЧ рдерд╛:


рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдХреИрд╢ рдореЗрдВ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╕рдордп, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдЯреИрдЧ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╢ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдп рдХрд┐рд╕ рд╡рд╕реНрддреБ / рд╕реВрдЪреА / рдореЙрдбрд▓ рдХрд╛ рд╣реИред рд╣рд╛рдВ, рдФрд░ рдЗрд╕ рдЯреИрдЧ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдПрдХ рдмрд╛рд░, рдореЗрдореНрдХреЗрдЪреНрдб + рдореЛрдВрдЧреЛрдбреАрдмреА рдмрдВрдбрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреИрд╢ рд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдм рдкрд░ рдПрдХ рд▓реЗрдЦ рдиреЗ рдореБрдЭреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рджрд┐рдПред рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╕рд░реНрд╡рд░ рд╕реЗ MongoDB рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рдерд╛ред рдЕрдм рдФрд░ рдирд┐рдХрдЯ рднрд╡рд┐рд╖реНрдп рдореЗрдВ, рдЕрдиреНрдп рдХреИрд╢рд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо (рд░реЗрдбрд┐рд╕ рдЖрджрд┐) рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред

рд╕рдорд╛рдзрд╛рди рдФрд░ рдХреЛрдб

рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рд╕рд░рд▓ рд╣реИ: рдХрд┐рд╕реА рд╕рд░рдгреА рдореЗрдВ рдХрд┐рд╕реА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреИрдЧ рдХреЗ рд▓рд┐рдП рд╕рднреА рдХреИрд╢рд┐рдВрдЧ рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛ - рдХреИрд╢ рдореЗрдВ рд╣реА, рдЗрд╕ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП рдХреИрд╢рд┐рдВрдЧ рдХреБрдВрдЬреА рдХреЗ рд░реВрдк рдореЗрдВ рдЯреИрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯреИрдЧ рд╕реНрд╡рдпрдВ рдЕрдиреБрд░реЛрдз рдХреЗ рдкреНрд░рдХрд╛рд░ рдФрд░ рдХреИрд╢ рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдореЛрдб рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдкреЗрдбрд╝ рдкрд░ рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдлреИрд▓рд╛рдиреЗ рдХреЗ рдмрд┐рдирд╛, рд╣рдо рддреБрд░рдВрдд рдЖрдзрд╛рд░ рдореИрдкрд░ рдХреЛрдб рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗ, рдЬрд┐рд╕рд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдореИрдкрд░ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реЗ рд╣реИрдВ (рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рдХреЛрдб рдХреА рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рд╢рд┐ рд╣реЛрдЧреА рдЬреЛ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдФрд░ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рдХрд╛рд░реНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ) ред рдЕрдЧрд░ рдмрд╣реБрдд рдХреЛрдб рд▓рдЧрддрд╛ рд╣реИ рддреЛ рддреБрд░рдВрдд рдореИрдВ рдорд╛рдлреА рдорд╛рдВрдЧрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рдЕрдВрджрд░ рдкрд░реНрдпрд╛рдкреНрдд рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдВ рдЫреЛрдбрд╝ рджреА рд╣реИрдВред

class System_ModelMapper { protected $_dbTable; //         protected $_modelName = ''; //  ,       -      public function __construct() { parent::__construct(); if (empty($this->_modelName)) { $parts = explode('_', get_class($this)); $this->_modelName = str_replace('Mapper', '', $parts[2]); } } //      dbtable    /** * @return /Zend_Db_Table_Abstract */ public function getDbTable() { if (null === $this->_dbTable) { $this->setDbTable('Application_Model_DbTable_' . $this->_modelName); } return $this->_dbTable; } public function setDbTable($dbTable) { if (is_string($dbTable)) { $dbTable = new $dbTable(); } if (!$dbTable instanceof Zend_Db_Table_Abstract) { throw new Exception('Invalid table data gateway provided'); } $this->_dbTable = $dbTable; return $this; } /** *       * @param array $params * @return System_Model */ public function getModel($params = array()) { $getInstance = 'Application_Model_' . $this->_modelName; return new $getInstance($params); } тАж } 


рдХрд┐рд╕реА рдПрдХрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ:

  /** *             * @param array $data   * @return string */ protected function objectCacheId($data) { $fields = array_keys($data); $values = md5(json_encode(array_values($data))); return 'find_' . $this->_modelName . '_' . join('_', $fields) . '_' . $values; } /** *           * @param $object System_Model * @return string */ public function getObjectCacheTag($object) { return 'object_' . $this->_modelName . '_' .$object->get_id(); } /** *       * @param numeric $id  ID * @param mixed $obj ,      * @param bool $cache         * @return bool|System_Model */ public function find($id, $obj = false, $cache = false) { return $this->findByFields(array('id' => $id), $obj, $cache); } /** *      * @param array $data     * @param mixed $obj ,      * @param bool $cache         * @return bool|System_Model */ public function findByFields($data, $obj = false, $cache = false) { //     -    ,        (        ,         (   :) ) if ($cache) { $cacheId = $this->objectCacheId($data); if (Zend_Registry::isRegistered(CACHE_NAME) { /** @var $cache System_Cache_Core */ $cache =& Zend_Registry::get(CACHE_NAME); //      -    if ($cache->test($cacheId)) { return $cache->load($cacheId); } } else { $cache = false; } } //   Zend_Db_Table         $select = $this->getDbTable()->select(); foreach ($data as $field => $value) { $select->where($select->getAdapter()->quoteIdentifier($field) . ' = ?', $value); } $row = $this->getDbTable()->fetchRow($select); if ($row) { if ($obj === false) { $obj = $this->getModel(); } $obj->setOptions($row->toArray()); } else { $obj = false; } //    -     if ($cache) { $cache->save($obj, $cacheId); } return $obj; } 


рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░ - рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдСрдмреНрдЬреЗрдХреНрдЯ рдЦреЛрдЬ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдЯреИрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рд╕реБрд░рд╛рдЧ рдирд╣реАрдВ рд╣реИред рдпрд╣ $ рдХреИрд╢ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕реНрддрд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдЕрдЧрд▓рд╛ рдПрдХ рдЯреЗрдмрд▓ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд╕рднреА рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рддрд░реАрдХреЗ рд╣реИрдВ, рдкреЗрдЬрд┐рдВрдЧ рдФрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП:

  /** *          ,    * @param array $data   * @param bool|string|array $order   * @param bool|System_Paginator $paginator     * @return string */ protected function listCacheId($data = array(), $order = false, $paginator = false) { $fields = array_keys($data); $values = md5(json_encode(array_values($data))); return sprintf('%s_%s_%s_%s_%s', $this->getListCacheTag(), join('_', $fields), $values, empty($order) ? '' : md5(json_encode($order)), is_object($paginator) ? $paginator->page . '_' . $paginator->limit : '' ); } /** *         * @return string */ public function getListCacheTag() { return 'list_' . $this->_modelName; } /** *        * @param array $data   * @param bool|string|array $order   * @param bool|System_Paginator $paginator     * @param bool|string $cache         */ public function fetchByFields($data = array(), $order = false, $paginator = false, $cache = false) { if ($cache) { $cacheId = $this->listCacheId($data, $order, $paginator); $cache .= 'Cache'; if (Zend_Registry::isRegistered(CACHE_NAME)) { /** @var $cache System_Cache_Core */ $cache =& Zend_Registry::get(CACHE_NAME); if ($cache->test($cacheId)) { return $cache->load($cacheId); } } else { $cache = false; } } //   ,           ,    $select = $this->getDbTable()->select(); $select_paginator = $this->getDbTable()->select(true); foreach ($data as $field => $value) { $s = '='; // value      ('=', 2)  ('<=', 10) if (is_array($value)) { $s = $value[0]; $value = $value[1]; } $select->where($select->getAdapter()->quoteIdentifier($field) . " $s ?", $value); $select_paginator->where($select->getAdapter()->quoteIdentifier($field) . " $s ?", $value); } //    if (!empty($order)) { $select->order($order); } else { $select->order('id ASC'); } //   ,     if (is_object($paginator)) { //        ,    $fetch_count = $this->getDbTable()->fetchRow($select_paginator->columns('count(id) as _c'))->toArray(); $paginator->total = $fetch_count['_c']; //    ,     ,     if ($paginator->page > $paginator->getLastPage()) $paginator->page = $paginator->getLastPage(); //       $select->limitPage($paginator->page, $paginator->limit); } $resultSet = $this->getDbTable()->fetchAll($select); $result = $this->rowsToObj($resultSet); //      -         (        limit) if (is_object($paginator)) { $paginator->inlist = count($result); } if ($cache) { $cache->save($result, $cacheId); } return $result; } /** *         * @param bool|string|array $order   * @param bool|System_Paginator $paginator     * @param bool|string $cache         * @return array|bool */ public function fetchAll($order = false, $paginator = false, $cache = false) { return $this->fetchByFields(array(), $order, $paginator, $cache); } /** *         * @param Zend_Db_Table_Rowset_Abstract $rowset     * @return array|bool */ protected function rowsToObj($rowset) { if (!empty($rowset)) { $entries = array(); foreach ($rowset as $row) { /** @var $entry System_Model */ $entry = $this->getModel($row->toArray()); $entries[$entry->get_id()] = $entry; } return $entries; } return false; } 


рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣рд╛рдВ рдпрд╣ рднреА рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдирдореВрдирд╛ рд▓реЗрдиреЗ рдХреЗ рддрд░реАрдХреЗ рд╕реНрд╡рдпрдВ рдЯреИрдЧ рдкреНрд░рдгрд╛рд▓реА рд╕реЗ рд╕реАрдзреЗ рд╕рдВрдмрдВрдзрд┐рдд рдирд╣реАрдВ рд╣реИрдВред

рдЕрдЧрд▓рд╛, рд╣рдо рдХрдХреНрд╖рд╛ рдХреЛрдб рджреЗрддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ рдорд╛рдирдХ Zend_Cache_Core рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдореЗрдореНрдХреЗрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреВрдЯрд╕реНрдЯреНрд░реИрдк рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреЛ рдмрдЪрд╛рдиреЗ, рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рдФрд░ рддрд░реАрдХреЛрдВ рдкрд░ рдлрд┐рд░ рд╕реЗ рд▓реМрдЯреЗрдВрдЧреЗред

 class System_Cache_Core extends Zend_Cache_Core { /** *    save   */ public function save($data, $id = null, $tags = array(), $specificLifetime = false, $priority = 8) { //      $ida = explode('_', $id); //        ,          switch ($ida[0]) { case 'list': //       2   (    ) $tag = join('_', array_splice($ida, 0, 2)); $this->updateTagList($tag, $id); break; case 'find': //   -       if ($data instanceof System_Model) { $tag = $data->get_mapper()->getObjectCacheTag($data); $this->updateTagList($tag, $id); } break; } //           return parent::save($data, $id, $tags, $specificLifetime, $priority); } /** *        * @param string $tag * @param string $cacheId */ public function updateTagList($tag, $cacheId) { //       $list = $this->getListByTag($tag); $list[] = $cacheId; //         $this->saveListByTag($tag, $list); } /** *      * @param string $tag */ protected function getListByTag($tag) { $tagcacheId = '_taglist_' . $tag; $list = array(); if ($this->test($tagcacheId)) { $list = $this->load($tagcacheId); } return $list; } /** *         * @param string $tag * @param array $list */ protected function saveListByTag($tag, $list) { $tagcacheId = '_taglist_' . $tag; $this->save($list, $tagcacheId); } /** *         * @param System_Model $object */ public function removeByObject($object = null) { if ($object instanceof System_Model) { //       $this->removeByTag($object->get_mapper()->getListCacheTag()); //             if ($object->get_id()) { $this->removeByTag($object->get_mapper()->getObjectCacheTag($object)); } } } /** *         * @param string $tag */ public function removeByTag($tag) { //      $list = $this->getListByTag($tag); //      foreach ((array)$list as $cacheId) { $this->remove($cacheId); } //      , ,    $this->saveListByTag($tag, array()); } } 


рдЦреИрд░, рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдФрд░ рд╣рдЯрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИ:

  /** *     * @param System_Model $object   * @param boolean $isInsert    * @return array|bool|mixed */ public function save($object, $isInsert = false) { $data = $object->toArray(); $find = array('id = ?' => $object->get_id()); if (null === ($id_value = $object->get_id())) { $isInsert = true; unset($data['id']); } if ($isInsert) { $pk = $this->getDbTable()->insert($data); if ($pk) { $object->set_id($pk); } $this->resetCache(); return $pk; } else { //    -       return $this->getDbTable()->update($data, $find) && $this->resetCache($object); } } /** *     * @param $object System_Model * @return array|bool|mixed */ public function insert($object) { return $this->save($object, true); } /** *     * @param $object System_Model   * @return bool */ public function remove($object) { $primary = $this->getDbTable()->get_primary(); $where = array('id = ?' => $object->get_id()); //   -      return ($this->getDbTable()->delete($where) && $this->resetCache($object)); } /** *         * @param System_Model $object * @param array $cacheIds * @return bool */ public function resetCache($object = null, $cacheIds = array()) { //       if (Zend_Registry::isRegistered(CACHE_NAME)) { /** @var $cache System_Cache_Core */ $cache = Zend_Registry::get(CACHE_NAME); if (!empty($object)) { //       $cache->removeByObject($object); } else { //     $cache->removeByTag($this->getListCacheTag()); } foreach ($cacheIds as $cacheId) { $cache->remove($cacheId); } } return true; } } 


рдирддреАрдЬрддрди, рд╣рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдФрд░ рдореЙрдбрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмреБрдирд┐рдпрд╛рджреА рдЯреИрдЧ рдкреНрд░рдгрд╛рд▓реА рдорд┐рд▓реА, рдЬреЛ рдЙрдкрдпреЛрдЧ рдореЗрдВ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИ рдФрд░ рд╕реНрд╡рдпрдВ рдпрд╛ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЯреИрдЧ рдирд╛рдо рдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреЗрдд рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдореЙрдбрд▓ рдХреЗ рд╕реНрд╡рдпрдВ рдФрд░ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЯреИрдЧ рдирд╛рдо рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реЛрддреЗ рд╣реИрдВред

рд╡реИрд╕реЗ, рд╕рдорд╕реНрдпрд╛ рдФрд░ рдЫреЛрдЯреА рдЪреАрдЬреЗрдВ (рдЬреЛ рдХрд┐рдП рдЬрд╛рдиреЗ рдФрд░ рд╣рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ):


рдЗрди рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдПрдХ рдпрд╛ рджреВрд╕рд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдЕрдиреБрднрд╡реА рдирд┐рд╡рд╛рд╕рд┐рдпреЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЛ рд╕реБрдирдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдкрджреНрдзрддрд┐ рдХреА рдЖрд▓реЛрдЪрдирд╛ рдХрд╛ рдЙрдЪрд┐рдд рд╣рд┐рд╕реНрд╕рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдкреБрдирд╢реНрдЪ рд╕рднреА рдЖрдЧрд╛рдореА рдХреЗ рд╕рд╛рде!

Source: https://habr.com/ru/post/In135047/


All Articles