Статьи

Убираем все действия в admin generator

      list:    
        title:             Список чего то
        batch_actions:     {}   
        object_actions:    {}    
        actions:           {}

Проверка Email c помощью sfValidatorEmail

Иногда необходимо использовать валидатор отдельно от формы

$dirtyValue = "broken.email.address"
$v = new sfValidatorEmail();
try{
  $v->clean($dirtyValue);
}
catch (sfValidatorError $e){
  // Validation failed
}

symfony tip: очистка кеша без командной строки

Часто на форумах, если что то не работает, то пишут

Please, try to clear the cache! (очистите кеш)

Но, что делать если нет доступа к командам типа symfony clear-cache или symfony cc Тогда очистить кеш можно удалив файлы кеш через FTP. Файлы приложения лежат в папке cache и удалив их, симфони автоматически создаст новые.

Этот метод подходит для небольших сайтов! Т.к. удаление может занять много времени!

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.

установка nano на FreeBSD

Казалось бы мелочь, но иногда пригождается

Переходим

cd /usr/ports/editors/nano
make install


Далее можно заметить, что запускается nano только вот так вот «/usr/local/bin/nano» так что делаем «rehash» и наслаждаемся любимым редактором

Просмотр логов с помощью MultiTail

MultiTail — утилита, основным назначением которой является вывод содержимого одновременно более чем одного файла в одно окно.

 

Список возможностей MultiTail впечатляет. Назвать его просто улучшенным tail было бы, мягко говоря, неуважительно. Взгляните на некоторые, основные возможности утилиты:
вывод более чем одного файла в терминал, который делится на т. н. окна;

  • терминал может разделяться на окна как горизонтально, так и вертикально;
  • окна можно создавать, перемещать, закрывать, объединять и временно скрывать;
  • в одно окно можно выводить более одного файла;
  • поиск как в одном окне, так и во всех сразу;
  • фильтрация строк перед выводом при помощи регулярных выражений;
  • мерцание экрана или звуковое оповещение при обнаружении определённого текста;
  • подсветка цветом текста на основе регулярных выражений;
  • направление вывода в текстовые файлы (работает, подобно tee);
  • работа в режиме syslog-сервера;
  • подавление вывода дублирующихся строк;
  • изменение конфигурации MultiTail «на лету» в ответ на изменения в наблюдаемом файле;
  • наблюдение за потоком стандартного ввода;
  • преобразование IP-адресов в имена хостов, значений errno в текстовые описания, etc;
  • разнообразные варианты обрезки длинных строк: справа, слева, определённую часть;
  • горизонтальная и вертикальная прокрутка, режим переноса длинных строк;
  • и многое, многое другое!

В Ubuntu достаточно команды:

sudo apt-get install multitail

Во FreeBSD из портов можно установить так:

# portsnap fetch update
# cd /usr/ports/sysutils/multitail
# make install clean

 

Вывод логов Squid

$ multitail /var/log/squid/access.log

Несколько некрасиво получается с учётом переноса строк. Можно попросить multitail обрезать строки справа (оставлять только начало строки):

$ multitail -p l /var/log/squid/access.log

 

Следим за пингом google.com:

$ multitail -l "ping google.com"

 

Просмотр лога Apache. Опцией «-cS apache» сообщаем multitail, что при выводе лог-файла необходимо использовать цветовую схему «apache». Полный список поставляемых в комплекте цветовых схем можно получить в /etc/multitail.conf.

$ multitail -cS apache /var/log/apache2/access.log

Поиск и подсветка при помощи регулярных выражений:

$ multitail -ec '"GET[^"]+"' -cS apache /var/log/apache2/access.log

Сброс пароля MySQL в Debian

Иногда по тем или иным причинам пароль супер пользователя потеря/забыт/пропит и приходится устанавливать новый пароль. Для дебиана подходит следующий способ:

$ /etc/init.d/mysql stop

Запускаем mysql через команду:

$ /usr/bin/mysqld_safe --skip-grant-tables --user=root &

& указывает на то что запуск команды произойдет в фоновом режиме.
Запускаем mysql от root:

 mysql -u root

Меняем пароль, обновляем привилегии пользователей mysql и выходим:

mysql> update mysql.user set Password=PASSWORD('новый пароль') WHERE User='root';
mysql> flush privileges;
mysql> exit

Перезапускаем mysql:

$ /etc/init.d/mysql restart

Проверяем:

$ mysql -u root -p

Валидные спец симфолы

Таблица спец символов:

Импорт данных с .sql файла

Иногда через обычные средства (phpmyadmin, etc) бывают недоступны или действуют ограничения. Только приходит на помощь консоль.

mysql -h <host_name> <db_name> -u <username> -p < <file_name>.sql

пароль вводится в интерактивном режиме