YiiBase
| Пакет | system |
|---|---|
| Наследование | класс YiiBase |
| Подклассы | Yii |
| С момента | 1.0 |
| Исходный код | framework/YiiBase.php |
Не используйте 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, если синглтон ещё не создан. |
public static function app()
{
return self::$_app;
}
Возвращает синглтон приложения или null, если синглтон ещё не создан.
autoload() метод
public static boolean autoload(string $className, bool $classMapOnly=false) | ||
| $className | строка | имя класса |
| $classMapOnly | bool | загружать классы только через classmap |
| {return} | булево | загружен ли класс успешно |
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 | строка | категория этого сообщения лога |
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');
См. также
createApplication() метод
public static mixed createApplication(string $class, mixed $config=NULL) | ||
| $class | строка | имя класса приложения |
| $config | смешанный тип | конфигурация приложения. Этот параметр будет передан как параметр конструктору класса приложения. |
| {return} | смешанный тип | экземпляр приложения |
public static function createApplication($class,$config=null)
{
return new $class($config);
}
Создаёт приложение указанного класса.
createComponent() метод
public static mixed createComponent(mixed $config) | ||
| $config | смешанный тип | конфигурация. Может быть строкой или массивом. |
| {return} | смешанный тип | созданный объект |
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 | |
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 | |
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 | категория этого сообщения журнала |
public static function endProfile($token,$category='application')
{
self::log('end:'.$token,CLogger::LEVEL_PROFILE,$category);
}
Помечает конец блока кода для профилирования. Это должно соответствовать предыдущему вызову beginProfile() с тем же токеном.
См. также
getFrameworkPath() метод
public static string getFrameworkPath() | ||
| {return} | string | путь к фреймворку |
public static function getFrameworkPath()
{
return YII_PATH;
}
getLogger() метод
public static CLogger getLogger() | ||
| {return} | CLogger | логгер сообщений |
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, если псевдоним недействителен. |
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 |
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 | имя класса или каталог, на который ссылается этот псевдоним |
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»). Регистр не учитывается. |
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 |
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, и вам придётся явно импортировать все классы. |
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, существующий синглтон приложения будет удалён. |
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 | объект логгера. |
public static function setLogger($logger)
{
self::$_logger=$logger;
}
Устанавливает объект логгера.
setPathOfAlias() метод
public static void setPathOfAlias(string $alias, string $path) | ||
| $alias | string | псевдоним пути |
| $path | string | путь, соответствующий псевдониму. Если это null, соответствующий псевдоним пути будет удалён. |
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 | переведённое сообщение |
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), т. е. возвращаемое сообщение будет выбрано из нескольких кандидатов в соответствии с заданным числовым значением. Эта функция в основном используется для решения проблемы форматирования множественного числа в случае, если сообщение имеет разные формы множественного числа на некоторых языках.
См. также
trace() метод
public static void trace(string $msg, string $category='application') | ||
| $msg | string | сообщение для регистрации |
| $category | string | категория сообщения |
public static function trace($msg,$category='application')
{
if(YII_DEBUG)
self::log($msg,CLogger::LEVEL_TRACE,$category);
}
Записывает сообщение отслеживания. Этот метод будет регистрировать сообщение только в случае, если приложение находится в режиме отладки.
См. также
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/YiiBase