Статьи
Doctrine: Поиск русском языке
На русском языке довольно сложно найти информацию о простой реализации поиска по базе данных, используя фрейморк Symfony. В официальном гайде используется Zend Lucene – поисковой движок от Zend, но для многих сайтов его функционал избыточен, да и подключение к проекту Symfony не совсем очевидно.
Подключение хелпера в форме
Да и не только в форме, также можно в экшене
sfProjectConfiguration::getActive()->loadHelpers(array('I18N'));
Или даже так
require_once(sfConfig::get('sf_symfony_lib_dir') . '/helper/JavascriptBaseHelper.php');
Стандартное логирование в symfony
Во время разработки иногда необходимо отлаживать приложение. Обычные средства типо print_r или var_dump могу быть недоступны, если приложение имеет большой функционал и т.п. В симфони с версии 1 есть страндартные способы логирования: В контроллере:
Timestampable actAs
actAs: Timestampable: created: name: created_at type: timestamp updated: disabled: true
Doctrine кешированиеDoctrine кеширование
Кешировать можно и нужно все! Если у вас есть apc, xcache, Memcache также можно хранить и в базе данных. У меня стоит APC, поэтому пример для него:
enablePlugins(array(
'sfDoctrinePlugin'
));
}
public function configureDoctrine(Doctrine_Manager $manager)
{
$manager->setAttribute(Doctrine_Core::ATTR_RESULT_CACHE, new Doctrine_Cache_Apc());
}
}
После этого сайт ускорился в 2 раза!
doctrine db column type
Type MySQL Type pgSQL Type
integer integer int/serial
integer(1) tinyint smallint/serial
integer(2) smallint smallint/serial
integer(3) mediumint int/serial
integer(4) int int/serial
integer(5) bigint bigint/bigserial
float double float
double double float
decimal decimal numeric
char char char
varchar varchar varchar
string varchar varchar
array text text
object text text
blob longblob bytea
blob(255) tinyblob bytea
blob(65532) blob bytea
blob(16777215) mediuumblob bytea
clob longtext text
clob(255) tinytext text
clob(65532) text text
clob(16777215) mediumtext text
timestamp datetime timestamp without timezone
time time time without timezone
date date date
gzip text text
boolean tinyint(1) boolean
bit bit varbit
varbit n/a varbit
inet n/a inet
Добавляем компрессию в symfony и MySQL
Кроме компрессии в настройках симфони можно добавить компрессию в соединение в PDO. Для MySQL это будет что то подобное в файле перед $this->dbh = new PDO:
\symfony\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Connection.php
if(!count($this->options['other']) && extension_loaded('pdo') && $this->options['dsn'] == 'mysql') { $this->options['other'] = array('MYSQL_ATTR_COMPRESS' => 'true', 'MYSQL_ATTR_INIT_COMMAND' => 'SET NAMES utf8'); }
По сути за компрессию отвечает флаг MYSQL_ATTR_COMPRESS
Из документации:
PDO::MYSQL_ATTR_COMPRESS (INT) Доступен в PHP 5.3 Включение компрессии при передаче по сети. Не поддерживается в mysqlnd.
Топ 10 плагинов для symfony
По сути каждый плагин представляет собой что то этакое, от куда можно подчерпнуть что нибудь новое. Т.к. плагины пишут для всех, в нем нужно учесть очень многое. Из за этого часто они отказываются работать сразу и приходиться плесать с бубном.
Тут я приведу 10 плагинов, которые по моему мнению должны быть в любом проекте или просто мне понравились.
Все плагины можно скачать на офф сайте по ссылке страница плагинов.
Управляем урлами или routing в symfony
Для своего сайта решил сделать красивые урлы, вроде как и для SEO лучше, да и для глаза приятней смотреть на красивые урлы. Как известно в symfony достаточно прописать в файле routing.yml желаемые урлы и все, но для symfony 1.1.4 это не очень помогло, тогда пришло в голову сделать так:
Запоминание пользователя при входе
Столкнулся с такой проблемой, когда авторизуешься и ставишь галочку «запомнить меня» при следующем входt не авторизует, хотя стоят куки (по умолчанию sfRemember).
Проблема связана с sfGuardBasicSecurityFilter. Как указано в документации, этот фильтр нужно включить следующем образом:
Введение в Symfony Framework
Symfony — это один из тех фреймворков на PHP5, который привлекает своей достаточной документацией, множеством плагинов, обновлениями, анонсами новых версий и многим другим. имхо тут нечего больше добавить (:
Введение
Сразу хочу отметить, что статья не тянет на учебное пособие или руководсво для новичков в PHP, потому что фреймворк досточно сложный, но интересный (: Как говориться, путь осилит идущий.