<rmcreative>

RSS

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

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

  1. CodeFest 2011, впечатления

    27 марта 2011

    CodeFest 2011 удался.

    Читаем

    16 комментариев
  2. Какой PHP фреймворк вы используете и почему?

    23 марта 2011

    На хабре появился довольно интересный опрос с обсуждением на горячую тему. Ответы немного удивили:

    • Yii на втором месте после Zend Framework. Думал, там будет Symfony или CodeIgniter.
    • Очень многие выбрали «самописный фреймворк». Дело, конечно, хорошее. Опыт наберётся быстро. Но для работодателя коммерчески невыгодно. Конечно, если задачи очень специфичны, вроде создания игр, то свой фреймворк может быть оправданным решением.
    • Подавляющее большинство «пишет на PHP, но не использует фреймворки». То ли лапшекодеров на хабре много, то ли все делают игры… не ясно.

    Обсуждаем и голосуем

    59 комментариев
  3. Почему в Yii свой ActiveRecord

    10 марта 2011

    Казалось бы, зачем изобретать велосипед и писать свой Active Record, а не взять существующую реализацию… например, phpactiverecord, RedBeanPHP или тот же ORM Doctrine. В случае Yii всё не так однозначно:

    • AR в Yii старше большинства готовых решений. Первые версии были реализованы в 2005-м ещё в Prado. AR постоянно улучшался и затем перекочевал в Yii, где улучшения продолжаются и сейчас.
    • Свой AR даёт более «ровный» API.
    • Использование внешнего кода = потеря контроля качества реализации. В стороннем коде могут быть ошибки, которые по каким-либо причинам не смогут быстро исправить… а ведь AR — очень важная часть фреймворка.
    41 комментарий
  4. Yii wallpaper

    7 марта 2011

    13 комментариев
  5. CodeFest 2011

    20 февраля 2011

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

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

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