Spec-Zone.ru › Yii 1.1

YiiBase

Пакет system
Наследование класс YiiBase
Подклассы Yii
С момента 1.0
Исходный код framework/YiiBase.php
YiiBase — вспомогательный класс, предоставляющий общие функциональности фреймворка.

Не используйте YiiBase напрямую. Вместо этого используйте его дочерний класс Yii, где вы можете настроить методы YiiBase.

Общедоступные свойства

Свойство Тип Описание Определено в
classMap массив карта классов, используемая механизмом автозагрузки Yii. YiiBase
enableIncludePath булево использовать путь PHP include для автозагрузки файлов классов. YiiBase

Общедоступные методы

Метод Описание Определено в
app() Возвращает синглтон приложения или null, если синглтон ещё не создан. YiiBase
autoload() Загрузчик автозагрузки классов. YiiBase
beginProfile() Помечает начало блока кода для профилирования. YiiBase
createApplication() Создаёт приложение указанного класса. YiiBase
createComponent() Создаёт объект и инициализирует его на основе заданной конфигурации. YiiBase
createConsoleApplication() Создаёт экземпляр консольного приложения. YiiBase
createWebApplication() Создаёт экземпляр веб-приложения. YiiBase
endProfile() Помечает конец блока кода для профилирования. YiiBase
getFrameworkPath() Возвращает путь к фреймворку. YiiBase
getLogger() Возвращает объект логирования сообщений. YiiBase
getPathOfAlias() Преобразует псевдоним в путь к файлу. YiiBase
getVersion() Возвращает версию фреймворка Yii. YiiBase
import() Импортирует класс или директорию. YiiBase
log() Записывает сообщение в лог. YiiBase
powered() Возвращает строку, которая может быть отображена на вашей веб-странице, показывая информацию об использовании Yii. YiiBase
registerAutoloader() Регистрирует новый загрузчик классов. YiiBase
setApplication() Сохраняет экземпляр приложения в статическом члене класса. YiiBase
setLogger() Устанавливает объект логирования. YiiBase
setPathOfAlias() Создаёт псевдоним пути. YiiBase
t() Переводит сообщение на указанный язык. YiiBase
trace() Записывает сообщение отслеживания. YiiBase

Подробное описание свойств

classMap свойство (доступно с версии v1.1.5)

public static array $classMap;

карта классов, используемая механизмом автозагрузки Yii. Ключи массива — имена классов, значения — соответствующие пути к файлам классов.

enableIncludePath свойство (доступно с версии v1.1.8)

public static boolean $enableIncludePath;

использовать ли путь PHP include для автозагрузки файлов классов. По умолчанию true. Вы можете установить это в false, если ваша хостинг-среда не позволяет изменять путь PHP include, или если вы хотите добавить дополнительные загрузчики автозагрузки к стандартному загрузчику Yii.

Подробное описание методов

app() метод

public static CApplication app()
{return} CApplication синглтон приложения, null, если синглтон ещё не создан.
Исходный код: framework/YiiBase.php#132 (показать)
public static function app()
{
    return 
self::$_app;
}

Возвращает синглтон приложения или null, если синглтон ещё не создан.

autoload() метод

public static boolean autoload(string $className, bool $classMapOnly=false)
$className строка имя класса
$classMapOnly bool загружать классы только через classmap
{return} булево загружен ли класс успешно
Исходный код: framework/YiiBase.php#400 (показать)
public static function autoload($className,$classMapOnly=false)
{
    
// use include so that the error PHP file may appear
    
if(isset(self::$classMap[$className]))
        include(
self::$classMap[$className]);
    elseif(isset(
self::$_coreClasses[$className]))
        include(
YII_PATH.self::$_coreClasses[$className]);
    elseif(
$classMapOnly)
        return 
false;
    else
    {
        
// include class file relying on include_path
        
if(strpos($className,'\\')===false)  // class without namespace
        
{
            if(
self::$enableIncludePath===false)
            {
                foreach(
self::$_includePaths as $path)
                {
                    
$classFile=$path.DIRECTORY_SEPARATOR.$className.'.php';
                    if(
is_file($classFile))
                    {
                        include(
$classFile);
                        if(
YII_DEBUG && basename(realpath($classFile))!==$className.'.php')
                            throw new 
CException(Yii::t('yii','Class name "{class}" does not match class file "{file}".', array(
                                
'{class}'=>$className,
                                
'{file}'=>$classFile,
                            )));
                        break;
                    }
                }
            }
            else
                include(
$className.'.php');
        }
        else  
// class name with namespace in PHP 5.3
        
{
            
$namespace=str_replace('\\','.',ltrim($className,'\\'));
            if((
$path=self::getPathOfAlias($namespace))!==false && is_file($path.'.php'))
                include(
$path.'.php');
            else
                return 
false;
        }
        return 
class_exists($className,false) || interface_exists($className,false);
    }
    return 
true;
}

Загрузчик автозагрузки классов. Этот метод предназначен для вызова внутри магического метода __autoload().

beginProfile() метод

public static void beginProfile(string $token, string $category='application')
$token строка токен для блока кода
$category строка категория этого сообщения лога
Исходный код: framework/YiiBase.php#511 (показать)
public static function beginProfile($token,$category='application')
{
    
self::log('begin:'.$token,CLogger::LEVEL_PROFILE,$category);
}

Помечает начало блока кода для профилирования. Это должно быть сопоставлено с вызовом endProfile() с тем же токеном. Вызовы begin и end также должны быть правильно вложены, например,

Yii::beginProfile('block1');
Yii::beginProfile('block2');
Yii::endProfile('block2');
Yii::endProfile('block1');
Последовательность ниже некорректна:
Yii::beginProfile('block1');
Yii::beginProfile('block2');
Yii::endProfile('block1');
Yii::endProfile('block2');

См. также

  • endProfile

createApplication() метод

public static mixed createApplication(string $class, mixed $config=NULL)
$class строка имя класса приложения
$config смешанный тип конфигурация приложения. Этот параметр будет передан как параметр конструктору класса приложения.
{return} смешанный тип экземпляр приложения
Исходный код: framework/YiiBase.php#123 (показать)
public static function createApplication($class,$config=null)
{
    return new 
$class($config);
}

Создаёт приложение указанного класса.

createComponent() метод

public static mixed createComponent(mixed $config)
$config смешанный тип конфигурация. Может быть строкой или массивом.
{return} смешанный тип созданный объект
Исходный код: framework/YiiBase.php#180 (показать)
public static function createComponent($config)
{
    
$args = func_get_args();
    if(
is_string($config))
    {
        
$type=$config;
        
$config=array();
    }
    elseif(isset(
$config['class']))
    {
        
$type=$config['class'];
        unset(
$config['class']);
    }
    else
        throw new 
CException(Yii::t('yii','Object configuration must be an array containing a "class" element.'));

    if(!
class_exists($type,false))
        
$type=Yii::import($type,true);

    if((
$n=func_num_args())>1)
    {
        if(
$n===2)
            
$object=new $type($args[1]);
        elseif(
$n===3)
            
$object=new $type($args[1],$args[2]);
        elseif(
$n===4)
            
$object=new $type($args[1],$args[2],$args[3]);
        else
        {
            unset(
$args[0]);
            
$class=new ReflectionClass($type);
            
// Note: ReflectionClass::newInstanceArgs() is available for PHP 5.1.3+
            // $object=$class->newInstanceArgs($args);
            
$object=call_user_func_array(array($class,'newInstance'),$args);
        }
    }
    else
        
$object=new $type;

    foreach(
$config as $key=>$value)
        
$object->$key=$value;

    return 
$object;
}

Создаёт объект и инициализирует его на основе заданной конфигурации.

Указанная конфигурация может быть строкой или массивом. Если строка, она интерпретируется как тип объекта, который может быть именем класса или псевдонимом пути к классу. Если массив, элемент 'class' интерпретируется как тип объекта, а остальные пары имя-значение в массиве используются для инициализации соответствующих свойств объекта.

Любые дополнительные параметры, переданные в этот метод, будут переданы в конструктор создаваемого объекта.

createConsoleApplication() метод

public static CConsoleApplication createConsoleApplication(mixed $config=NULL)
$config mixed конфигурация приложения. Если строка, она обрабатывается как путь к файлу, содержащему конфигурацию; если массив, это фактическая информация о конфигурации. Убедитесь, что в конфигурации указан параметр basePath, который должен указывать на каталог, содержащий всю логику приложения, шаблоны и данные. Если нет, каталог будет по умолчанию «protected».
{return} CConsoleApplication
Исходный код: framework/YiiBase.php#111 (показать)
public static function createConsoleApplication($config=null)
{
    return 
self::createApplication('CConsoleApplication',$config);
}

Создаёт экземпляр консольного приложения.

createWebApplication() метод

public static CWebApplication createWebApplication(mixed $config=NULL)
$config mixed конфигурация приложения. Если строка, она обрабатывается как путь к файлу, содержащему конфигурацию; если массив, это фактическая информация о конфигурации. Убедитесь, что в конфигурации указан параметр basePath, который должен указывать на каталог, содержащий всю логику приложения, шаблоны и данные. Если нет, каталог будет по умолчанию «protected».
{return} CWebApplication
Исходный код: framework/YiiBase.php#96 (показать)
public static function createWebApplication($config=null)
{
    return 
self::createApplication('CWebApplication',$config);
}

Создаёт экземпляр веб-приложения.

endProfile() метод

public static void endProfile(string $token, string $category='application')
$token string токен для блока кода
$category string категория этого сообщения журнала
Исходный код: framework/YiiBase.php#523 (показать)
public static function endProfile($token,$category='application')
{
    
self::log('end:'.$token,CLogger::LEVEL_PROFILE,$category);
}

Помечает конец блока кода для профилирования. Это должно соответствовать предыдущему вызову beginProfile() с тем же токеном.

См. также

  • beginProfile

getFrameworkPath() метод

public static string getFrameworkPath()
{return} string путь к фреймворку
Исходный код: framework/YiiBase.php#158 (показать)
public static function getFrameworkPath()
{
    return 
YII_PATH;
}

getLogger() метод

public static CLogger getLogger()
{return} CLogger логгер сообщений
Исходный код: framework/YiiBase.php#531 (показать)
public static function getLogger()
{
    if(
self::$_logger!==null)
        return 
self::$_logger;
    else
        return 
self::$_logger=new CLogger;
}

getPathOfAlias() метод

public static mixed getPathOfAlias(string $alias)
$alias string псевдоним (например, system.web.CController)
{return} mixed путь к файлу, соответствующий псевдониму, false, если псевдоним недействителен.
Исходный код: framework/YiiBase.php#359 (показать)
public static function getPathOfAlias($alias)
{
    if(isset(
self::$_aliases[$alias]))
        return 
self::$_aliases[$alias];
    elseif((
$pos=strpos($alias,'.'))!==false)
    {
        
$rootAlias=substr($alias,0,$pos);
        if(isset(
self::$_aliases[$rootAlias]))
            return 
self::$_aliases[$alias]=rtrim(self::$_aliases[$rootAlias].DIRECTORY_SEPARATOR.str_replace('.',DIRECTORY_SEPARATOR,substr($alias,$pos+1)),'*'.DIRECTORY_SEPARATOR);
        elseif(
self::$_app instanceof CWebApplication)
        {
            if(
self::$_app->findModule($rootAlias)!==null)
                return 
self::getPathOfAlias($alias);
        }
    }
    return 
false;
}

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

getVersion() метод

public static string getVersion()
{return} string версия фреймворка Yii
Исходный код: framework/YiiBase.php#81 (показать)
public static function getVersion()
{
    return 
'1.1.19';
}

import() метод

public static string import(string $alias, boolean $forceInclude=false)
$alias string путь-псевдоним для импорта
$forceInclude boolean должен ли файл класса быть включён сразу. Если false, файл класса будет включён только тогда, когда класс используется. Этот параметр используется только тогда, когда путь-псевдоним относится к классу.
{return} string имя класса или каталог, на который ссылается этот псевдоним
Исходный код: framework/YiiBase.php#263 (показать)
public static function import($alias,$forceInclude=false)
{
    if(isset(
self::$_imports[$alias]))  // previously imported
        
return self::$_imports[$alias];

    if(
class_exists($alias,false) || interface_exists($alias,false))
        return 
self::$_imports[$alias]=$alias;

    if((
$pos=strrpos($alias,'\\'))!==false) // a class name in PHP 5.3 namespace format
    
{
        
$namespace=str_replace('\\','.',ltrim(substr($alias,0,$pos),'\\'));
        if((
$path=self::getPathOfAlias($namespace))!==false)
        {
            
$classFile=$path.DIRECTORY_SEPARATOR.substr($alias,$pos+1).'.php';
            if(
$forceInclude)
            {
                if(
is_file($classFile))
                    require(
$classFile);
                else
                    throw new 
CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.',array('{alias}'=>$alias)));
                
self::$_imports[$alias]=$alias;
            }
            else
                
self::$classMap[$alias]=$classFile;
            return 
$alias;
        }
        else
        {
            
// try to autoload the class with an autoloader
            
if (class_exists($alias,true))
                return 
self::$_imports[$alias]=$alias;
            else
                throw new 
CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing directory or file.',
                    array(
'{alias}'=>$namespace)));
        }
    }

    if((
$pos=strrpos($alias,'.'))===false)  // a simple class name
    
{
        
// try to autoload the class with an autoloader if $forceInclude is true
        
if($forceInclude && (Yii::autoload($alias,true) || class_exists($alias,true)))
            
self::$_imports[$alias]=$alias;
        return 
$alias;
    }

    
$className=(string)substr($alias,$pos+1);
    
$isClass=$className!=='*';

    if(
$isClass && (class_exists($className,false) || interface_exists($className,false)))
        return 
self::$_imports[$alias]=$className;

    if((
$path=self::getPathOfAlias($alias))!==false)
    {
        if(
$isClass)
        {
            if(
$forceInclude)
            {
                if(
is_file($path.'.php'))
                    require(
$path.'.php');
                else
                    throw new 
CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing PHP file and the file is readable.',array('{alias}'=>$alias)));
                
self::$_imports[$alias]=$className;
            }
            else
                
self::$classMap[$className]=$path.'.php';
            return 
$className;
        }
        else  
// a directory
        
{
            if(
self::$_includePaths===null)
            {
                
self::$_includePaths=array_unique(explode(PATH_SEPARATOR,get_include_path()));
                if((
$pos=array_search('.',self::$_includePaths,true))!==false)
                    unset(
self::$_includePaths[$pos]);
            }

            
array_unshift(self::$_includePaths,$path);

            if(
self::$enableIncludePath && set_include_path('.'.PATH_SEPARATOR.implode(PATH_SEPARATOR,self::$_includePaths))===false)
                
self::$enableIncludePath=false;

            return 
self::$_imports[$alias]=$path;
        }
    }
    else
        throw new 
CException(Yii::t('yii','Alias "{alias}" is invalid. Make sure it points to an existing directory or file.',
            array(
'{alias}'=>$alias)));
}

Импортирует класс или каталог.

Импортирование класса подобно включению соответствующего файла класса. Основное различие состоит в том, что импорт класса намного легче, потому что файл класса включается только при первом использовании класса.

Импортирование каталога эквивалентно добавлению каталога в путь включения PHP. Если импортируется несколько каталогов, каталоги, импортированные позже, будут иметь приоритет в поиске файла класса (то есть они добавляются в начало пути включения PHP).

Псевдонимы путей используются для импорта класса или каталога. Например,

  • application.components.GoogleMap: импортирует класс GoogleMap.
  • application.components.*: импортирует каталог components.


Один и тот же путь-псевдоним может быть импортирован несколько раз, но только первый раз будет эффективен. Импортирование каталога не импортирует его подкаталоги.

Начиная с версии 1.1.5, этот метод также может использоваться для импорта класса в формате пространства имён (доступен только для PHP 5.3 или выше). Это аналогично импорту класса в формате пути-псевдонима, за исключением того, что разделитель точки заменяется на обратный слэш. Например, импорт application\components\GoogleMap аналогичен импорту application.components.GoogleMap. Разница заключается в том, что первый класс использует полное имя, а второй — нет.

Обратите внимание, что импорт класса в формате пространства имён требует, чтобы пространство имён соответствовало допустимому пути-псевдониму после замены символов обратного слэша на символы точки. Например, пространство имён application\components должно соответствовать допустимому пути-псевдониму application.components.

log() метод

public static void log(string $msg, string $level='info', string $category='application')
$msg string сообщение для регистрации
$level string уровень сообщения (например, «trace», «warning», «error»). Регистр не учитывается.
$category string категория сообщения (например, «system.web»). Регистр не учитывается.
Исходный код: framework/YiiBase.php#469 (показать)
public static function log($msg,$level=CLogger::LEVEL_INFO,$category='application')
{
    if(
self::$_logger===null)
        
self::$_logger=new CLogger;
    if(
YII_DEBUG && YII_TRACE_LEVEL>0 && $level!==CLogger::LEVEL_PROFILE)
    {
        
$traces=debug_backtrace();
        
$count=0;
        foreach(
$traces as $trace)
        {
            if(isset(
$trace['file'],$trace['line']) && strpos($trace['file'],YII_PATH)!==0)
            {
                
$msg.="\nin ".$trace['file'].' ('.$trace['line'].')';
                if(++
$count>=YII_TRACE_LEVEL)
                    break;
            }
        }
    }
    
self::$_logger->log($msg,$level,$category);
}

Регистрирует сообщение. Сообщения, зарегистрированные с помощью этого метода, могут быть получены с помощью CLogger::getLogs и могут быть записаны в различные носители, такие как файлы, электронная почта, база данных, с помощью CLogRouter.

powered() метод

public static string powered()
{return} string строка, которая может быть отображена на вашей веб-странице, показывая информацию об использовании Yii
Исходный код: framework/YiiBase.php#553 (показать)
public static function powered()
{
    return 
Yii::t('yii','Powered by {yii}.', array('{yii}'=>'<a href="http://www.yiiframework.com/" rel="external">Yii Framework</a>'));
}

Возвращает строку, которая может быть отображена на вашей веб-странице, показывая информацию об использовании Yii

registerAutoloader() метод

public static void registerAutoloader(callback $callback, boolean $append=false)
$callback callback допустимый PHP-обработчик (имя функции или массив ($className, $methodName)).
$append boolean должен ли новый автозагрузчик добавляться после стандартного автозагрузчика Yii. Будьте осторожны при использовании этого параметра, так как он отключит автозагрузку через путь include, когда установлен в true. После этого автозагрузчик Yii не сможет больше полагаться на загрузку классов через простой include, и вам придётся явно импортировать все классы.
Исходный код: framework/YiiBase.php#630 (показать)
public static function registerAutoloader($callback, $append=false)
{
    if(
$append)
    {
        
self::$enableIncludePath=false;
        
spl_autoload_register($callback);
    }
    else
    {
        
spl_autoload_unregister(array('YiiBase','autoload'));
        
spl_autoload_register($callback);
        
spl_autoload_register(array('YiiBase','autoload'));
    }
}

Регистрирует новый автозагрузчик класса. Новый автозагрузчик будет размещён перед autoload и после всех других существующих автозагрузчиков.

setApplication() метод

public static void setApplication(CApplication $app)
$app CApplication экземпляр приложения. Если это null, существующий синглтон приложения будет удалён.
Исходный код: framework/YiiBase.php#147 (показать)
public static function setApplication($app)
{
    if(
self::$_app===null || $app===null)
        
self::$_app=$app;
    else
        throw new 
CException(Yii::t('yii','Yii application can only be created once.'));
}

Хранит экземпляр приложения в статическом члене класса. Этот метод помогает реализовать шаблон синглтона для CApplication. Повторное вызов этого метода или конструктора CApplication приведёт к исключению. Для получения экземпляра приложения используйте app().

setLogger() метод (доступен начиная с v1.1.8)

public static void setLogger(CLogger $logger)
$logger CLogger объект логгера.
Исходный код: framework/YiiBase.php#544 (показать)
public static function setLogger($logger)
{
    
self::$_logger=$logger;
}

Устанавливает объект логгера.

setPathOfAlias() метод

public static void setPathOfAlias(string $alias, string $path)
$alias string псевдоним пути
$path string путь, соответствующий псевдониму. Если это null, соответствующий псевдоним пути будет удалён.
Исходный код: framework/YiiBase.php#384 (показать)
public static function setPathOfAlias($alias,$path)
{
    if(empty(
$path))
        unset(
self::$_aliases[$alias]);
    else
        
self::$_aliases[$alias]=rtrim($path,'\\/');
}

Создаёт псевдоним пути. Обратите внимание, что этот метод не проверяет существование пути и не нормализует путь.

t() метод

public static string t(string $category, string $message, array $params=array ( ), string $source=NULL, string $language=NULL)
$category string категория сообщения. Используйте только буквы. Примечание, категория 'yii' зарезервирована для использования кодом ядра Yii. См. CPhpMessageSource для дополнительной информации о категории сообщений.
$message string исходное сообщение
$params array параметры, которые будут применены к сообщению, используя strtr. Первый параметр может быть числом без ключа. В этом случае метод вызовет CChoiceFormat::format для выбора соответствующего перевода сообщения. Начиная с версии 1.1.6, вы можете передавать параметр для CChoiceFormat::format или форматирование множественных форм без его обертывания в массив. Этот параметр затем доступен как {n} в строке перевода сообщения.
$source string компонент приложения, использующий источник сообщений. По умолчанию null, что означает использование 'coreMessages' для сообщений, принадлежащих категории 'yii', и использование 'messages' для остальных сообщений.
$language string целевой язык. Если null (по умолчанию), будет использован язык приложения.
{return} string переведённое сообщение
Исходный код: framework/YiiBase.php#582 (показать)
public static function t($category,$message,$params=array(),$source=null,$language=null)
{
    if(
self::$_app!==null)
    {
        if(
$source===null)
            
$source=($category==='yii'||$category==='zii')?'coreMessages':'messages';
        if((
$source=self::$_app->getComponent($source))!==null)
            
$message=$source->translate($category,$message,$language);
    }
    if(
$params===array())
        return 
$message;
    if(!
is_array($params))
        
$params=array($params);
    if(isset(
$params[0])) // number choice
    
{
        if(
strpos($message,'|')!==false)
        {
            if(
strpos($message,'#')===false)
            {
                
$chunks=explode('|',$message);
                
$expressions=self::$_app->getLocale($language)->getPluralRules();
                if(
$n=min(count($chunks),count($expressions)))
                {
                    for(
$i=0;$i<$n;$i++)
                        
$chunks[$i]=$expressions[$i].'#'.$chunks[$i];

                    
$message=implode('|',$chunks);
                }
            }
            
$message=CChoiceFormat::format($message,$params[0]);
        }
        if(!isset(
$params['{n}']))
            
$params['{n}']=$params[0];
        unset(
$params[0]);
    }
    return 
$params!==array() ? strtr($message,$params) : $message;
}

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

См. также

  • CMessageSource

trace() метод

public static void trace(string $msg, string $category='application')
$msg string сообщение для регистрации
$category string категория сообщения
Исходный код: framework/YiiBase.php#454 (показать)
public static function trace($msg,$category='application')
{
    if(
YII_DEBUG)
        
self::log($msg,CLogger::LEVEL_TRACE,$category);
}

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

См. также

  • log

© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/YiiBase

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API