Memcached + Doctrine + Zend Framework
Совмещаем все это вместе, получаем неплохое ускорение работы доктрины.
Ставим memcached
Как Установить Memcached на windows?
- качаем отсюда бинарник http://code.jellycan.com/memcached/
- ложим в c:\memcached (или другой путь)
- из консоли инсталим как сервис c:\memcached\memcached.exe -d install
Установка под *nix ищется на ура в гугли.
bootstrap
(привожу весь код инитера доктрины)
/* * Init Doctrine */ protected function _initDoctrine() { $config=$this->getOption('database'); require_once 'Doctrine.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Doctrine'); try { Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']); } catch (Exception $e) { echo 'FATAL ERROR: MySql is down'; exit; } Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true); Doctrine::loadModels(APPLICATION_ROOT . "/models"); // Install Tables Doctrine::createTablesFromModels(APPLICATION_ROOT . "/models"); // Cache $configCache=$this->getOption('cache'); // Clearer -------------------------------------------------------- $memcache_obj = new Memcache; $con=$memcache_obj->connect($configCache['host'], $configCache['port']); if ($con==FALSE) { echo 'FATAL ERROR: MemCache is down'; exit; } //$memcache_obj->flush(); // отчистка кеша // --------------------------------------------------------------- $servers = array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cacheDriver = new Doctrine_Cache_Memcache(array( 'servers' => $servers, 'compression' => false ) ); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_QUERY_CACHE_LIFESPAN, 3600); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE, $cacheDriver); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_RESULT_CACHE_LIFESPAN, 3600); }
Все проинииализили и сказали Doctrine что нужно использовать memcache при запросах и выдачи результата
Если у вас в проекте есть Zend_Translate то подцепляем и его:
$configCache=$this->getOption('cache'); $backendOptions=array( 'host' => $configCache['host'], 'port' => $configCache['port'], 'persistent' => true ); $cache = Zend_Cache::factory('Core', 'Memcached', $frontendOptions, $backendOptions); Zend_Translate::setCache($cache);
везде используются данные из конфига (ini) вот кусок:
; cache memcached cache.host = localhost cache.port = 11211
Запросы
1. После тестов, прямые запросы (DQL) выполняются намного шустрей, т.е.:
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories'); $newsCategories= $q->execute()->toKeyValueArray("id","url");
Намного шустрей чем удобное
$newsCategories=Doctrine::getTable("NewsCategories")->findAll()->toKeyValueArray("id","url");
и плюс, в последнем запросе нельзя указывать что нужно использовать кеш (!!!)
теперь все свои запросы приводим в вид «юзай кеш»
$q = Doctrine_Query::create() ->select('id, url') ->from('NewsCategories') ->useCache(); $newsCategories= $q->execute()->toKeyValueArray("id","url");
все =)
Уникальных посетителей темы: 126Doctrine Accessors и Mutators
Очень часто пароль мы хешируем, для этого есть замечательный метод hasMutator.
Пример модели:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class User extends Doctrine_Record { public function setTableDefinition() { $this->hasColumn('username', 'string' 255); $this->hasColumn('password', 'string', 255); } public function setUp() { $this->hasMutator('password', 'md5Password'); } public function md5Password($value) { $this->_set('password', md5($value)); } } |
и теперь когда мы работаем с созданием модели, апдейтом и т.д. можно просто писать так
1 2 3 4 | $user=new Users(); $user->username="aa"; $user->password="haha"; $user->save(); |
в базе будет положена колонка с паролем в md5
Уникальных посетителей темы: 38Doctrine & Zend Framework 1.8 (zf1.8)
В ветке 1.8 были изменены методы инициалиции, в частности все вынесенно в Bootstrap.php. Теперь о том как подключить Doctrine к ZF 1.8.4.
В конфиге (application/configs/application.ini) :
1 2 3 4 5 6 | database.adapter = PDO_MYSQL database.params.host = localhost database.params.username = dbloging database.params.password = dbpass database.params.dbname = dbname database.charset = utf8 |
В application/Bootstrap.php добавляем :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | protected function _initDoctrine() { $config=$this->getOption('database'); require_once 'Doctrine.php'; $autoloader = Zend_Loader_Autoloader::getInstance(); $autoloader->registerNamespace('Doctrine'); Doctrine_Manager::connection("mysql://".$config['params']['username'].":".$config['params']['password']."@".$config['params']['host']."/".$config['params']['dbname'])->setCharset($config['charset']); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_MODEL_LOADING, Doctrine::MODEL_LOADING_AGGRESSIVE); Doctrine_Manager::getInstance()->setAttribute(Doctrine::ATTR_USE_NATIVE_ENUM, true); Doctrine::loadModels(APPLICATION_PATH . "/models"); } |
Уникальных посетителей темы: 50Удаление дубликатов в MySQL
Все банально =)
DELETE t1 FROM userlogins t1, userlogins t2 WHERE t1.login=t2.login AND t1.ID != t2.ID
Уникальных посетителей темы: 50Zend Server CE установка и настройка для Windows (Windows Zend Server Community Edition)
Установка Zend Server CE
Рассмотрим процедуру установки и настройки сборки Zend Server CE для Windows, напомню я уже делал обзор Zend Server.
И так, мы хотим установить себе Zend Server CE (далее по тексту ZS).
Первое что нам нужно сделать, это скачать последную версию с сайта:
http://www.zend.com/products/server/downloads-all
Там выбираем пакет для Windows, на момент написания это был файл:
![]()
Скачиваем…
Теперь перейдем к настройке и установке
- Запускаем скачанный файл
- Установка доступна в 3-х вариантах: Typical, Full and Custom
Custom - вы сможете сами выбрать что поставить, а что нет =) (ВЫБИРАЕМ ЭТОТ ПУНКТ) - Ставим галочки напротив нужных вещей


- Перейдете в диалог Destination Location где нужно выбрать КУДА ставить сервер, я советую выбирать путь такой c:\zs\ (описание будет данно для этого пути)

- Порт apache выбираем 80
- В итоге будет поставлено:
- PHP 5.2.9 -- Common Extensions -- Additional Extensions -- Zend Optimizer+ -- Zend Debugger -- Zend Data Cache - Zend Framework 1.8.2 -- Zend Framework Base - phpMyAdmin - MySQL Server - Apache Web Server on port 80
- Жмем Install. Будет загруженно дополнительно phpmyadmin (почему то 2.11.9.3 – я обычно потом ставлю ветку 3.x) и mysql сервер.
Настройка Zend Server CE
Заходим в панель управления:
http://localhost/ZendServer/

Вводим свой пароль, входим. Там можете поиграть с GUI =)
Но мы пойдем дальше…
Первое что я меняю, так это делаю vhosts т.к. все таки мы не один сайт разрабатываем, а много, для этого делаем изменения:
1. У меня все сайты лежать в папке c:/www
2. Создаем файл c:/www/vhosts.conf в нем пишем наши сайты:
NameVirtualHost *:80
<VirtualHost 127.0.0.1>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\phpmyadmin»
ServerName 127.0.0.1
ServerAlias www.phpmyadmin
</VirtualHost>
<VirtualHost 127.0.0.2>
ServerAdmin mail@mail.com
DocumentRoot «C:\www\site1″
ServerName 127.0.0.2
ServerAlias www.site1
</VirtualHost>
и т.д., меняем айпи и папку где лежит сайт.
3. Меняем конфиг апача c:/zs/Apache2/conf/httpd.conf
Добавим строку в конце:
Include c:/www/vhosts.conf
Строки:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
переделываем на
<Directory />
# Options FollowSymLinks
# AllowOverride None
# Order deny,allow
# Deny from all
</Directory>
4. Запустим апач, если все запустилось, то при открытии http://127.0.0.1 у нас будет phpMyAdmin (предварительно туда его желательно залить -) )
Собственно это все.
Уникальных посетителей темы: 1 718Zend Server 4.0.3 & Zend Studio 7.0 Early Access Release
Вышли обновления для таких вещей как Zend Server до версии 4.0.3.
Основное это переход на PHP 5.3 (RC2).
Скачать Zend Server можно по ссылке:
http://www.zend.com/en/products/server/downloads-ea
Теперь более глобальное обновление Zend Studio до версии 7.0 !!!!
- Zend Studio базируется на последней версии Eclipse (Galileo).
- Поддержка PHP 5.3 (Namespace)
- Улучшение редактора кода
- Поддержка интеграции Zend Server
Теперь Zend Studio еще больше интегриновать с Zend Framework:
- Легкое создание любых элементов Zend Framework
- Настраиваемый дефолтный проект
- Обновленные примеры работы
- Интеграция Zend Tool
Скачать Zend Studio 7.0 и потестить можете по ссылке:
http://www.zend.com/en/products/studio/studio-7-early-access
Уникальных посетителей темы: 30Обновления Zend Framework 1.8.1 и Doctrine 1.1.1
Обновляемся на новые версии фреймворка и doctrine.
Zend Framework качаем тут:
http://framework.zend.com/download/latest
обзор прошлой версии смотрим тут
http://devzone.zend.com/article/4524-Zend-Framework-1.8.0-Released
В данной версии исправленно более 68 ошибок в коде, ошибки в документации и «Быстром старте». Так же сделанны изменения (без перевода)
- Zend_Loader::registerAutoload() now proxies to Zend_Loader_Autoloader, and marks the instance as a fallback autoloader. This will ensure equivalent functionality, and reduces the number of deprecation notices emitted to one.
- Many bugfixes and improvements to Zend_Application.
- Addition of module generation capabilities to Zend_Tool
- Addition of strong object typing capabilities to Zend_Amf
- Many more manual translations!
Полный список тут: http://short.ie/zf1-8-1-issues
Doctrine
Качаем как обычно с http://www.doctrine-project.org/download
Уникальных посетителей темы: 19Doctrine 1.1 Released !
Сегодня была зарелизина Doctrine 1.1 !
Новшества:
* Новый hydration метод
* Новый иструмент для «объединений» миграций
* Улучшена поддержка и интеграция для accessor и mutator в fromArray() и toArray()
* Усовершенствования в getModified(), toArray(), fromArray(), synchronizeWithArray()
* Усовершенствования ядро для поиска, SoftDelete, Versionable
* и т.д.
Более подробную информацию о новшествах можно прочитать тут http://www.doctrine-project.org/upgrade/1_1
или обновляем по svn:
$ svn co http://svn.doctrine-project.org/tags/1.1.0/lib doctrine
upd: Нашел удобную для себя функцию:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $q = Doctrine_Query::create() ->from('User u'); $users = $q->execute(); $array = $users->toKeyValueArray('id', 'name'); print_r($array); /* array( 4 => 'zYne', 5 => 'Arnold Schwarzenegger', 6 => 'Michael Caine', 7 => 'Takeshi Kitano', 8 => 'Sylvester Stallone', 9 => 'Kurt Russell', 10 => 'Jean Reno', 11 => 'Edward Furlong', ) */ |
Что есть очень удобно для передачи потом виеву для формирование полей значений для select!
Уникальных посетителей темы: 17