<rmcreative>

RSS

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

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

  1. Yii, автокомплит для Yii::app

    4 августа 2011

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

    • В index.php подключаем YiiBase.php вместо yii.php, дописываем свой класс с аннотацией для IDE:
    require(dirname(__FILE__) . '/../framework/YiiBase.php');
     
    class Yii extends YiiBase {
        /**
         * @static
         * @return CWebApplication
         */
        public static function app()
        {
            return parent::app();
        }
    }
     
    $config=dirname(__FILE__).'/../protected/config/main.php';
     
    defined('YII_TRACE_LEVEL') or define('YII_TRACE_LEVEL',3);
    $app = Yii::createWebApplication($config)->run();

    После всех манипуляций получим дополнение, например, для Yii::app()->user->.

    50 комментариев
  2. Yii, HMVC

    4 августа 2011

    Пример простого HMVC в Yii.

    5 комментариев
  3. Yii, параметры action-а

    4 августа 2011

    В Yii есть приятная возможность: все $_GET-параметры автоматом передаются как аргументы метода.

    public function actionView($id)
    {
        echo $id == $_GET['id'];
    }

    Можно расширить возможность, например, на POST как показал helmut в топике:

    class MyPostAwareController extends CController
    {
        public function getActionParams()
        {
          return array_merge($_GET, $_POST);
        }
    }
    17 комментариев
  4. urldecode и кодировки

    9 июля 2011

    Сегодня неожиданно много времени провёл за изучением одного из репортов в трекере Yii. Первопричина оказалась совсем не той и крылась, как это часто бывает, в несоблюдении стандартов. Вообще тонкости две:

    1. PHP-шный urldecode работает напрямую с октетами (теми, что %AB), так что интерпретация строки зависит от кодировки скрипта. В случае Yii это UTF-8.

    2. Хоть RFC 3986 в районе 16-ой страницы и говорит нам, что «data should first be encoded as octets according to the UTF-8 character encoding», но всё-же достаточно большое количество ПО использует другие кодировки. Чаще всего это ISO-8859-1.

    То есть после декодирования мы можем получить либо UTF-8, либо что-то ещё. Это ещё скорее всего будет ISO-8859-1.

    Ну и решение — свой urldecode:

    /**
     * Improved variant of urldecode.
     * Properly decodes both UTF-8 and ISO-8859-1 encoded URIs.
     *
     * @param string $str encoded string
     * @return string decoded string
     */
    private function urldecode($str)
    {
        $str = urldecode($str);
     
        // is it UTF-8?
        // http://w3.org/International/questions/qa-forms-utf-8.html
        if(preg_match('%^(?:
           [\x09\x0A\x0D\x20-\x7E]            # ASCII
         | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
         | \xE0[\xA0-\xBF][\x80-\xBF]         # excluding overlongs
         | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
         | \xED[\x80-\x9F][\x80-\xBF]         # excluding surrogates
         | \xF0[\x90-\xBF][\x80-\xBF]{2}      # planes 1-3
         | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
         | \xF4[\x80-\x8F][\x80-\xBF]{2}      # plane 16
        )*$%xs', $str))
        {
            return $str;
        }
        else
        {
            return utf8_encode($str);
        }
    }
    3 комментария
  5. Yiiclipse, поддержка Yii для Eclipse PDT

    27 июня 2011

    В лагере IDE, умеющих работать с Yii прибыло. Конечно, с фреймворком и так довольно приятно работать во всех IDE с нормальной поддержкой PHP, но некоторые специфичные вещи всё-таки бывают очень полезными.

    Yiiclipse добавляет две возможности к стандартным для PDT: wizard для создания проекта и, что самое главное, навигацию по вызовам view и layout.

    Пользуемся

    10 комментариев
  6. Yii 1.1.8

    27 июня 2011

    Вышел релиз Yii 1.1.8, включающий более 80 багфиксов, новых возможностей и улучшений. Огромное спасибо тем, кто репортил баги, предлагал новые фичи и использовал по назначению Orphus на yiiframework.ru.

    Забрать свежий дистрибутив можно с официального сайта.

    Инструкции по обновлению можно почитать в UPGRADE.

    Полный список изменений, как обычно, можно прочитать в CHANGELOG, мы же бегло рассмотрим самое интересное.

    Читаем

    9 комментариев
  7. YiiCookbook.​org

    25 июня 2011

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

    Как вам?

    10 комментариев
  8. Порядок регистрации автозагрузчиков классов в Yii

    14 июня 2011

    Вплоть до версии 1.1.7 можно было регистрировать автозагрузчики классов только в одном порядке. Перед родным автозагрузчиком:

    Kohana
    Zend Framework
    Yii
    

    В итоге при загрузке родных классов срабатывал сначала автозагрузчик Kohana, затем Zend Framework и только потом родной. И происходило это для каждого класса. С версии 1.1.8 этого можно избежать, поставив сторонние загрузчики после Yii:

    Yii
    Zend Framework
    Kohana
    

    Достаточно добавить всего один параметр:

    Yii::app()->registerAutoloader(array('EZendAutoloader', 'load'), true);
    Yii::app()->registerAutoloader(array('EKohanaAutoloader', 'load'), true);

    Реализация:

    10 комментариев
  9. DevConf 2011, впечатления

    6 июня 2011

    Вчера вернулся с DevConf, где читал доклад про Yii и процесс его разработки. В общем доклад был похож на одноимённый с CodeFest, но включал себя багфиксы и раскрывал мысль несколько лучше. На вопрос «во что может превратиться Yii, если его разработчики станут компанией» я чётко ответил «в Битрикс», чем, сдаётся мне, поверг окружающих в лёгкий в шок. На самом деле оговорился :) Вопросы были, кстати, очень хорошие и правильные. Спасибо задававшим их людям.

    Читаем

    18 комментариев
  10. Свои классы для правил роутера Yii

    24 мая 2011

    В следующей версии Yii появится возможность использовать свой класс для конкретного правила роутера:

    array(
      // стандартное правило CUrlRule
      '<action:(login|logout)>' => 'site/<action>',
     
      // свой класс
      array(
        'class' => 'application.components.MyUrlRule',
        'connectionID' => 'db',
      ),
    )

    Это позволит, например, с лёгкостью реализовать такую штуку, как наличие потенциально конфликтующих URL:

    /about
    /contact
    /my-cool-blog-post
    /my-cool-static-page
    

    Код уже в транке, если есть желание или необходимость — можете опробовать. Замечания и предложения приветствуются.

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