<rmcreative>

RSS

Все заметки с тегом «yii»

Можно уточнить:

  1. Кеширование SQL-запросов в Yii

    11 февраля 2011

    Сегодня Qiang реализовал ещё одну интересную штуку для Yii: кеширование запросов к базе данных на всех уровнях от DAO до ActiveRecord.

    $sql = 'SELECT * FROM tbl_post LIMIT 20';
    // кешируем результат запроса 1000 секунд
    $rows = Yii::app()->db->cache(1000)->createCommand($sql)->queryAll();

    Если данные в таблице меняются, можно попробовать инвалидировать кеш, используя менее затратный запрос:

    $sql = 'SELECT * FROM tbl_post LIMIT 20';
    // сбрасываем кеш, если результат изменился
    $dependency = new CDbCacheDependency('SELECT MAX(update_time) FROM tbl_post');
    // кешируем на 1000 секунд
    $rows = Yii::app()->db->cache(1000, $dependency)->createCommand($sql)->queryAll();

    С AR это работает так:

    $posts = Post::model()->cache(1000)->findAll();
    $posts = Post::model()->cache(1000)->with('author')->findAll();

    Опробовать можно, забрав код из SVN. Войдёт в релиз 1.1.7.

    16 комментариев
  2. HMVC

    10 февраля 2011

    В последнее время часто всплывает тема иерархического MVC или HMVC. Штука довольно интересная, но по-простому почти нигде не описана, что и исправим.

    HMVC отличается от классического MVC лишь тем, что из любого контроллера, представления или компонента можно запустить действие другого контроллера.

    Это довольно удобно для построения сайтов портального типа, где на одной странице показывается несколько независимых частей, и виджетов.

    В большинстве реализаций, таких как HMVC в Kohana 3, CodeIgniter Modular Extensions, Zend Framework Action View Helper и runController в Yii, при этом, отдельного HTTP-запроса не происходит.

    Kohana 3 также умеет запускать контроллеры по HTTP, хотя, кроме весьма неплохой интеграции с её роутингом, ничего нового тут нет: использовать CURL или сокеты для дополнительного запроса не сложно.

    11 комментариев
  3. Командная строка в PhpStorm

    8 февраля 2011

    Ввод консольной команды в PhpStorm

    Поддержка выполнения консольных команд через Ctrl+Shift+X появилась уже несколько EAP-билдов назад, но информации по использованию чего-либо, кроме консолей Zend Framework или Symfony до недавнего времени не было.

    Оказалось, что подключить свои команды несложно.

    Если команда есть в path в виде .bat или .sh, то достаточно её добавить через Settings → Command Line Tool Support → Add → Custom Framework. Там можно поступить, например, с pear.

    Для того, чтобы получить поддержку Yii, после добавления команды $PhpExecutable$ путь/до/yiic.php необходимо открыть XML-ку с определением команд и добавить внутри <framework> примерно следующее:

    <command>
      <name>shell</name>
    </command>
    <command>
      <name>migrate</name>
    </command>
    <command>
      <name>message</name>
    </command>
    <command>
      <name>webapp</name>
    </command>

    После этого IDE начнёт подсказывать варианты команд. Чтобы получить более подробные подсказки, необходимо лучше описать команды.

    7 комментариев
  4. Yii совсем без MVC

    23 января 2011

    Интересный пост «Yii без MVC» нашёлся в блоге Евгения Карагодина. В нём он описывает использование Yii без view и стандартных директорий. Можно пойти дальше и использовать Yii вообще без MVC. Ну или использовать, например, только M. Для этого во входном файле делаем так:

    $yii='path/to/framework/yii.php';
    $config=dirname(__FILE__).'/config.php';
     
    require($yii);
    // при желании можно объявить конфиг параметром в виде массива и не использовать файл
    Yii::createWebApplication($config);
     
    // далее любой код с использованием Yii:
     
    $criteria = new CDbCriteria();
    $criteria->limit = 10;
    $criteria->order = 'id DESC';
    $posts = Post::model()->findAll($criteria);
    echo "<ol>";
    foreach($posts as $post)
    {
      echo "<li>";
      echo $post->title;
      echo "</li>";
    }
    echo "</ol>"
    15 комментариев
  5. Yii 1.1.6

    17 января 2011

    PHP-фреймворк Yii обновился до версии 1.1.6. Обновление не только правит ошибки, но и добавляет много нового. Какие же изменения были сделаны?

    Читаем

    11 комментариев
  6. Yii::t и перевод множественных форм слова по CLDR 2

    16 января 2011

    После мощного брейншторма первоначальной реализации и сбора идей воедино, было решено дополнить перевод множественных форм некоторыми полезными штуками.

    Подстановка параметров, число передаётся как {n}

    Yii::t('test', '{username} has a cucumber|{username} has {n} cucumbers',
    array(5, '{username}' => 'samdark'));

    Получим:

    samdark has 5 cucumbers
    

    Замена параметра {n}

    function convertNumber($number)
    {
        // число прописью
        return $number;
    }
     
    Yii::t('test', '{n} cucumber|{n} cucumbers',
    array(5, '{n}' => convertNumber(5)));

    Получим:

    five cucumbers
    

    Дробные числа

    Yii::t('app', 'cucumber|cucumbers', 1.5);

    В файле перевода за дроби в Русском отвечает четвёртый параметр:

    'cucumber|cucumbers' => 'огурец|огурца|огурцов|огурца',

    На выходе:

    огурца
    

    Полное описание можно найти на странице «Интернационализация» полного руководства.

    10 комментариев
  7. Исключаем отдельный файл из индексации PhpStorm

    15 января 2011

    В PhpStorm на данный момент нет возможности исключить из индекса отдельный файл, что сильно портит жизнь тем, кто использует фреймворк Yii. Дело в том, что IDE при наличии одинаковых классов в нескольких файлах не знает, который из них использовать для автодополнения и предпочитает не выводить дополнения вовсе.

    Рано или поздно это будет исправлено, а пока можно воспользоваться небольшим трюком:

    • File → Settings → IDE Settings → File Types.
    • Ищем в списке Text Files, жмём нижнюю Add... и добавляем yiilite.php.

    Теперь yiilite.php будет исключён из индексирования для всех проектов.

    UPD: Алексей подсказал, что способ есть:

    • File → Settings → IDE Settings → File Types → Ignore files and folders. Через ; вписываем yiilite.php;

    UPD2: В текущих версиях PhpStorm появилась возможность исключить отдельный файл из индексации прямо из контекстного меню, выбрав Mark as Plain Text.

    14 комментариев
  8. Yii::t и перевод множественных форм слова по CLDR

    13 января 2011

    В транк Yii попала ещё одна интересная возможность, которая облегчит жизнь всем, кто имеет дело с мультиязычными проектами, а именно поддержка перевода множественных форм слова по правилам CLDR в Yii::t.

    Теперь для человеческого перевода строк вроде «10 яблок», «51 яблоко» не нужно писать страшные правила, а процесс будет выглядеть как показано ниже.

    В коде делаем всё как обычно:

    echo '10 '.Yii::t('app', 'apple', array(10));
    echo '51 '.Yii::t('app', 'apple', array(51));

    В файле перевода для Русского записываем:

    return array(
        'apple' => 'яблоко|яблока|яблок',
    );

    Для Английского, соответственно будет:

    return array(
        'apple' => 'apple|apples',
    );

    Полный список правил доступен на сайте CLDR.

    17 комментариев
  9. Улучшенное сообщение об ошибке в транке Yii

    22 декабря 2010

    Дошли, наконец, руки перечитать весь фидбек по улучшенной странице ошибки для Yii, доделать и слить всё это в SVN.

    Расширение на англоязычном сайте и код в yiiext теперь можно считать устаревшими.

    До релиза планируется сделать ещё несколько существенных улучшений в отображении ошибок, таких, например, как блоки кода для каждого шага трейса.

    А пока буду очень рад новому фидбеку и идеям.

    Скриншот

    14 комментариев
  10. Удаление «ненужных» файлов из Yii

    5 декабря 2010

    Несколько раз на форумах и в других местах всплывали вопросы вроде «что можно удалить из Yii». Лично я, конечно, считаю, что удалять оттуда ничего не надо: вряд-ли на сервере нет десяти мегабайт дискового пространства, но всё-же покажу, как можно сократить размер Yii.

    Читаем

    15 комментариев