<rmcreative>

RSS

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

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

  1. CodeFest 2011

    20 февраля 2011

    На прошлый CodeFest в Новосибирске мне попасть не посчастливилось, а вот на грядущем 19 и 20 марта я буду читать доклад про Yii. Не про сам фреймворк, а про его разработку: почему принимаются те или иные решения, почему над ним трудится ограниченный круг разработчиков, что на самом деле значит это Yii и многое другое.

    Остальную программу пока посмотреть негде, но, думаю, будет не хуже прошлого раза.

    7 комментариев
  2. Yii: параметры именованных групп условий в отношениях

    20 февраля 2011

    До готовящегося релиза 1.1.7 можно было применить именованные группы условий, они же named scopes, к отношениям:

    $posts=Post::model()->with('comments:recently:approved')->findAll();

    Но нельзя было указать для них параметры. Решил эту проблему creocoder. Теперь, слив свежий код из SVN, можно делать так:

    $users=User::model()->findAll(
        'with'=>array(
            'posts'=>array(
                'scopes'=>array(
                    'rated'=>5,
                ),
            ),
        ),
    );
    8 комментариев
  3. Yii: объекты и классы как результат выборки

    12 февраля 2011

    Предложение возвращать объекты вместо массивов при использовании построителя запросов или DAO нам сразу понравилось. Сегодня у меня дошли руки до реализации и в SVN появилась данная возможность в несколько расширенном варианте.

    $sql='SELECT * FROM posts LIMIT 1';
    $command=$this->_connection->createCommand($sql);
    $command->setFetchMode(PDO::FETCH_OBJ);
    $post = $command->queryRow();
    echo $post->title;

    Параметры setFetchMode принимает идентично одноимённому методу PDO, тем самым позволяя, например, получать строки в виде новых объектов, экземпляров указанного класса или наполнять существующие объекты.

    8 комментариев
  4. Кеширование 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 комментариев
  5. 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 или сокеты для дополнительного запроса не сложно.

    12 комментариев
  6. Командная строка в 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 комментариев
  7. 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 комментариев
  8. Yii 1.1.6

    17 января 2011

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

    Читаем

    11 комментариев
  9. 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 комментариев
  10. Исключаем отдельный файл из индексации 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 комментариев