Выполнить консольную команду Symfony2 из PHP кода

Апр 16 2013

Пример вызова миграции из своего кода

1
2
3
4
5
6
7
$arguments = array(
  'command' => '', // без этого ключа пишет ошибку "No enought argument".
  '--no-interaction' => true,
);
$input = new ArrayInput($arguments);
$command = $this->getApplication()->find('doctrine:migrations:migrate');
$returnCode = $command->run($input, $output);

Комментарии отключены на этот пост

Модификаторы preg_replace паттернов

Апр 15 2013

Пару раз замучался искать эту страницу в доках по php. Так что пусть дежит здесь

i (PCRE_CASELESS) 
 Если этот модификатор используется, символы в шаблоне соответствуют символам как верхнего, так и нижнего регистра. 
m (PCRE_MULTILINE) 
 По умолчанию PCRE обрабатывает данные как однострочную символьную строку (даже если она содержит несколько разделителей строк). Метасимвол начала строки '^' соответствует только началу обрабатываемого текста, в то время как метасимвол "конец строки" '$' соответствует концу текста, либо позиции перед завершающим текст переводом строки (в случае, если модификатор D не установлен). В Perl ситуация полностью аналогична.  Если этот модификатор используется, метасимволы "начало строки" и "конец строки" также соответствуют позициям перед произвольным символом перевода и строки и, соответственно, после, как и в самом начале и в самом конце строки. Это соответствует Perl-модификатору /m. В случае, если обрабатываемый текст не содержит символов перевода строки, либо шаблон не содержит метасимволов '^' или '$', данный модификатор не имеет никакого эффекта. 
s (PCRE_DOTALL) 
 Если данный модификатор используется, метасимвол "точка" в шаблоне соответствует всем символам, включая перевод строк. Без него - всем, за исключением переводов строк. Этот модификатор эквивалентен записи /s в Perl. Класс символов, построенный на отрицании, например [^a], всегда соответствует переводу строки, независимо от наличия этого модификатора. 
x (PCRE_EXTENDED) 
 Если используется данный модификатор, неэкранированные пробелы, символы табуляции и пустой строки будут проигнорированы в шаблоне, если они не являются частью символьного класса. Также игнорируются все символы между неэкранированным символом '#' (если он не является частью символьного класса) и символом перевода строки (включая сами символы '\n' и '#'). Это эквивалентно Perl-модификатору /x, и позволяет размещать комментарий в сложных шаблонах. Замечание: это касается только символьных данных. Пробельные символы не фигурируют в служебных символьных последовательностях, к примеру, в последовательности '(?(', открывающей условную подмаску. 
e (PREG_REPLACE_EVAL) 
 Если используется данный модификатор, preg_replace() после выполнения стандартных подстановок в заменяемой строке интерпретирует ее как PHP-код и использует результат для замены искомой строки. Одинарные и двойные кавычки, обратные слэши (\) NULL-символы будут проэкранированы обратными слэшами в подставляемых обратных ссылках.

 

Комментарии отключены на этот пост

Как убрать поле из вывода form_rest() в twig

Апр 14 2013

Когда мы выводим поле формы в twig не через стандартные функции, а обычным html кодом, поле останется как неотрендереное и быдет выведено при вызове form_rest().

Чтобы избежать такого дублирования полей, надо пометить поле как отрендереное:

1
{% do form.contenu.setRendered %}

Комментарии отключены на этот пост

Пример YAML маппинга БД для Symfony2

Апр 13 2013

Просто пример всех возможных настроек:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# Doctrine.Tests.ORM.Mapping.User.dcm.yml
Doctrine\Tests\ORM\Mapping\User:
  type: entity
  table: cms_users
  indexes:
    name_index:
      columns: [ name ]
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 50
  oneToOne:
    address:
      targetEntity: Address
      joinColumn:
        name: address_id
        referencedColumnName: id
  oneToMany:
    phonenumbers:
      targetEntity: Phonenumber
      mappedBy: user
      cascade: ["persist", "merge"]
  manyToMany:
    groups:
      targetEntity: Group
      joinTable:
        name: cms_users_groups
        joinColumns:
          user_id:
            referencedColumnName: id
        inverseJoinColumns:
          group_id:
            referencedColumnName: id
  lifecycleCallbacks:
    prePersist: [ doStuffOnPrePersist, doOtherStuffOnPrePersistToo ]
    postPersist: [ doStuffOnPostPersist ]

Комментарии отключены на этот пост

Получить доступ к службе в Entity классе в Symfony2

Апр 12 2013

Вообще это нарушает все концепции Sumfony и задача должна быть решена как то подругому, но если очень нужно:

1
2
3
4
5
6
7
global $kernel;
 
if ('AppCache' == get_class($kernel)) {
    $kernel = $kernel->getKernel();
}
 
$service = $kernel->getContainer()->get('alef.role_service');

Комментарии отключены на этот пост

Как указать определенный ssh ключ для удаленного git репозитария

Апр 12 2013

С ростом количества проектов, начинает расти количества репозитариев с которыми работаем.

В какой то момент выясняется что ssh ключ по умолчанию лежащий у нас в ~/.ssh/id_rsa не может быть использован с новым прокетом. Причин может быть множество. Например неподдерживаемый алгоритм шифрования на сервере заказчика. В таком случе создаем файл ~/.ssh/config куда пишем следующее:

1
2
3
4
5
6
7
8
9
Host gitolite-as-alice
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_rsa.alice
 
Host gitolite-as-bob
  HostName git.company.com
  User git
  IdentityFile /home/whoever/.ssh/id_dsa.bob

И далее используем gitolite-as-alice и gitolite-as-bob как имера серверов git репозитариев

Например так:

1
2
git remote add alice git@gitolite-as-alice:whatever.git
git remote add bob git@gitolite-as-bob:whatever.git

Комментарии отключены на этот пост

Конкатенация строк в twig

Апр 12 2013

Для склеивания двух переменных в twig шаблоне используем такую конструкцию:

1
{{ 'http://' ~ app.request.host }}

Комментарии отключены на этот пост

Преобразовать массив в URL GET строку

Апр 12 2013

Опять же встроенные функции PHP

1
2
3
4
5
6
7
$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');
 
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');

И вторая — более интересная:

1
2
3
4
5
6
7
$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');
 
echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&');

Комментарии отключены на этот пост

Преобразовать строку URL в массив переменных

Апр 12 2013

Для этого существует встроенная функция php:

1
2
3
4
5
$url = 'http://username:password@hostname/path?arg=value#anchor';
 
print_r(parse_url($url));
 
echo parse_url($url, PHP_URL_PATH);

Комментарии отключены на этот пост

Отслеживание количества обращений к mysql в реальном времени

Фев 14 2013

Чтобы отследить нагрузку на mysql сервер в онлайн режиме, можно прибегнуть к простой команде

1
mysqladmin extended-status -i 1 -r -uroot | grep -e "Com_select"

Результат будет выведен примерно в таком виде:

1
2
3
4
5
6
7
8
| Com_select                            | 36           |
| Com_select                            | 55           |
| Com_select                            | 46           |
| Com_select                            | 49           |
| Com_select                            | 117          |
| Com_select                            | 145          |
| Com_select                            | 191          |
| Com_select                            | 224          |

Цифры: количество select запросов к базе за прошедшую секунду

Соответсственно для update и insert запросов команда будет выглядеть так

mysqladmin extended-status -i 1 -r -uroot | grep -e "Com_insert"
mysqladmin extended-status -i 1 -r -uroot | grep -e "Com_update"

Комментарии отключены на этот пост

Старые записи »