13 октября 2011 г.

Сборник cоветов по компонентам Zend-а

В процессе рефакторинга часто встречаются различные "прелести", оставшиеся от старых версий тех или иных библиотек. Есть такие и у зенда. Буду дополнять этот сборник по мере работы.

Zend_Paginator
Было:
$adapter = new Zend_Paginator_Adapter_DbTableSelect($select);
$adapter->setRowCount($countItem);
$paginator = new Zend_Paginator($adapter);
Стало:
$paginator = Zend_Paginator::factory($select)
$paginator->getAdapter()->setRowCount($countItem);

Если стиль и внешний вид скроллинга одинаковы для всего приложения, стоит задать их один раз. 
Zend_Paginator::setDefaultScrollingStyle('Elastic');
Zend_View_Helper_PaginationControl::setDefaultViewPartial('pagination.phtml');


Zend_Cache
Если кешей много, используй силу, Люк Zend_Cache_Manager. 
тунс


Zend_Request  
Было:
$_SERVER['HTTP_REFERER'];
$_SERVER['HTTP_USER_AGENT'];
и т.д.
Стало:
$this->_request->getClientIp();
$this->_request->getRequestUri();
$this->_request->getServer('HTTP_REFERER', 'undef');
$this->_request->getServer('HTTP_USER_AGENT', 'undef');



Zend_Db_Select
Было:
$select->where( 'alliances.id IN ('. implode(',', $alls) .')' );
Стало:
$select->where( 'alliances.id IN (?)', $alls);

Сложный WHERE
$ligs = array();
//тут каждый пайтонщик должен испытать гордость за выбранный язык =) 
foreach( $searchOpt->liga as $val )
   $ligs[] = $this->_db->quoteInto( 'players.liga = ?', $val );
$select->where( implode(' OR ', $ligs) );

Запрос на несколько таблиц (отвязка от таблицы)
Copy Source | Copy HTML
  1. $select = $this->select();
  2. $select->setIntegrityCheck(false)
  3.       ->from($this, array('players.id', 'players.id_alliance'))
  4.       ->join('alliances','players.id_alliance = alliances.id',array('alliances.name AS all'));

Zend_Db_Table
Привязка multidb без лишних костылей
Copy Source | Copy HTML
  1. //переопределяем метод Zend_Db_Table_Abstract
  2. protected function _setupDatabaseAdapter()
  3. {
  4.        $this->_db = Zend_Controller_Front::getInstance()
  5.                                            ->getParam('bootstrap')
  6.                                            ->getPluginResource('multidb')
  7.                                            ->getDb('majordomoru');
  8.        parent::_setupDatabaseAdapter();
  9. }
Удаление записей
Было
$this->delete( $this->_db->quoteInto('id = ?', $idA) );
Стало
$this->delete( array('id = ?', $idA) );

Zend_Session
Сессию стоит привязывать к браузеру юзера (а для IP в ZF2 тоже есть компонент)
Zend_Session::registerValidator( new Zend_Session_Validator_HttpUserAgent() );



Zend_Route
Простые проверки переменных можно проводить ещё на этапе роутинга, но стоит помнить о стандартном роутере (подробнее тут)
Copy Source | Copy HTML
  1. $router->addRoute('userHistory',

  2.                 new Zend_Controller_Router_Route('/profile/history/:page/:count',

  3.                         array( 'controller' => 'user', 'action' => 'history', 'page' => 1, 'count' => 20 ),

  4.                         array( 'page' => '\d+', 'count' => '^(10|20|50|100)$' )));

Комментариев нет: