Наследование Application


Иногда приходится расширять Application, чтобы добавить новый функционал
В данном случае - регистронезависимый поиск для sqlite

// Файл: components/MyWebApp.php

function ci_utf8_like($mask, $value) {
    $mask = str_replace(
        array("%", "_"),
        array(".*?", "."),
        preg_quote($mask, "/")
    );
    $mask = "/^$mask$/ui";
    return preg_match($mask, $value);
}

class MyWebApp extends CWebApplication {


    public function init()
    {
        setlocale(LC_ALL,'ru_RU.UTF-8');
        mb_internal_encoding("UTF-8");
        mb_regex_encoding("UTF-8");

        parent::init();

        $b = Yii::app()->db->pdoInstance->sqliteCreateFunction('like', "ci_utf8_like", 2);

        $L = isset(Yii::app()->session['lang'])? Yii::app()->session['lang'] : '';
        if (in_array($L,array('ru','en')))
            Yii::app()->language = $L;

        Yii::app()->name = Yii::app()->params[Yii::app()->language.'_name'];
    }

} // class

Старт нового приложения делается в index.php:

$webapp = dirname(__FILE__).'/protected/components/MyWebApp.php';

require_once($webapp);

Yii::createApplication('MyWebApp',$config)->run();