|
@@ -1,564 +1,209 @@
|
|
|
-<?php
|
|
|
-/**
|
|
|
- * @link http://www.yiiframework.com/
|
|
|
- * @copyright Copyright (c) 2008 Yii Software LLC
|
|
|
- * @license http://www.yiiframework.com/license/
|
|
|
- */
|
|
|
-
|
|
|
-namespace yii;
|
|
|
-
|
|
|
-use yii\base\InvalidArgumentException;
|
|
|
-use yii\base\InvalidConfigException;
|
|
|
-use yii\base\UnknownClassException;
|
|
|
-use yii\di\Container;
|
|
|
-use yii\log\Logger;
|
|
|
-
|
|
|
-/**
|
|
|
- * Gets the application start timestamp.
|
|
|
- */
|
|
|
-defined('YII_BEGIN_TIME') or define('YII_BEGIN_TIME', microtime(true));
|
|
|
-/**
|
|
|
- * This constant defines the framework installation directory.
|
|
|
- */
|
|
|
-defined('YII2_PATH') or define('YII2_PATH', __DIR__);
|
|
|
-/**
|
|
|
- * This constant defines whether the application should be in debug mode or not. Defaults to false.
|
|
|
- */
|
|
|
-defined('YII_DEBUG') or define('YII_DEBUG', false);
|
|
|
-/**
|
|
|
- * This constant defines in which environment the application is running. Defaults to 'prod', meaning production environment.
|
|
|
- * You may define this constant in the bootstrap script. The value could be 'prod' (production), 'dev' (development), 'test', 'staging', etc.
|
|
|
- */
|
|
|
-defined('YII_ENV') or define('YII_ENV', 'prod');
|
|
|
-/**
|
|
|
- * Whether the the application is running in production environment.
|
|
|
- */
|
|
|
-defined('YII_ENV_PROD') or define('YII_ENV_PROD', YII_ENV === 'prod');
|
|
|
-/**
|
|
|
- * Whether the the application is running in development environment.
|
|
|
- */
|
|
|
-defined('YII_ENV_DEV') or define('YII_ENV_DEV', YII_ENV === 'dev');
|
|
|
-/**
|
|
|
- * Whether the the application is running in testing environment.
|
|
|
- */
|
|
|
-defined('YII_ENV_TEST') or define('YII_ENV_TEST', YII_ENV === 'test');
|
|
|
-
|
|
|
-/**
|
|
|
- * This constant defines whether error handling should be enabled. Defaults to true.
|
|
|
- */
|
|
|
-defined('YII_ENABLE_ERROR_HANDLER') or define('YII_ENABLE_ERROR_HANDLER', true);
|
|
|
-
|
|
|
-/**
|
|
|
- * BaseYii is the core helper class for the Yii framework.
|
|
|
- *
|
|
|
- * Do not use BaseYii directly. Instead, use its child class [[\Yii]] which you can replace to
|
|
|
- * customize methods of BaseYii.
|
|
|
- *
|
|
|
- * @author Qiang Xue <qiang.xue@gmail.com>
|
|
|
- * @since 2.0
|
|
|
- */
|
|
|
-class BaseYii
|
|
|
-{
|
|
|
- /**
|
|
|
- * @var array class map used by the Yii autoloading mechanism.
|
|
|
- * The array keys are the class names (without leading backslashes), and the array values
|
|
|
- * are the corresponding class file paths (or [path aliases](guide:concept-aliases)). This property mainly affects
|
|
|
- * how [[autoload()]] works.
|
|
|
- * @see autoload()
|
|
|
- */
|
|
|
- public static $classMap = [];
|
|
|
- /**
|
|
|
- * @var \yii\console\Application|\yii\web\Application the application instance
|
|
|
- */
|
|
|
- public static $app;
|
|
|
- /**
|
|
|
- * @var array registered path aliases
|
|
|
- * @see getAlias()
|
|
|
- * @see setAlias()
|
|
|
- */
|
|
|
- public static $aliases = ['@yii' => __DIR__];
|
|
|
- /**
|
|
|
- * @var Container the dependency injection (DI) container used by [[createObject()]].
|
|
|
- * You may use [[Container::set()]] to set up the needed dependencies of classes and
|
|
|
- * their initial property values.
|
|
|
- * @see createObject()
|
|
|
- * @see Container
|
|
|
- */
|
|
|
- public static $container;
|
|
|
-
|
|
|
-
|
|
|
- /**
|
|
|
- * Returns a string representing the current version of the Yii framework.
|
|
|
- * @return string the version of Yii framework
|
|
|
- */
|
|
|
- public static function getVersion()
|
|
|
- {
|
|
|
- return '2.0.16-dev';
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Translates a path alias into an actual path.
|
|
|
- *
|
|
|
- * The translation is done according to the following procedure:
|
|
|
- *
|
|
|
- * 1. If the given alias does not start with '@', it is returned back without change;
|
|
|
- * 2. Otherwise, look for the longest registered alias that matches the beginning part
|
|
|
- * of the given alias. If it exists, replace the matching part of the given alias with
|
|
|
- * the corresponding registered path.
|
|
|
- * 3. Throw an exception or return false, depending on the `$throwException` parameter.
|
|
|
- *
|
|
|
- * For example, by default '@yii' is registered as the alias to the Yii framework directory,
|
|
|
- * say '/path/to/yii'. The alias '@yii/web' would then be translated into '/path/to/yii/web'.
|
|
|
- *
|
|
|
- * If you have registered two aliases '@foo' and '@foo/bar'. Then translating '@foo/bar/config'
|
|
|
- * would replace the part '@foo/bar' (instead of '@foo') with the corresponding registered path.
|
|
|
- * This is because the longest alias takes precedence.
|
|
|
- *
|
|
|
- * However, if the alias to be translated is '@foo/barbar/config', then '@foo' will be replaced
|
|
|
- * instead of '@foo/bar', because '/' serves as the boundary character.
|
|
|
- *
|
|
|
- * Note, this method does not check if the returned path exists or not.
|
|
|
- *
|
|
|
- * See the [guide article on aliases](guide:concept-aliases) for more information.
|
|
|
- *
|
|
|
- * @param string $alias the alias to be translated.
|
|
|
- * @param bool $throwException whether to throw an exception if the given alias is invalid.
|
|
|
- * If this is false and an invalid alias is given, false will be returned by this method.
|
|
|
- * @return string|bool the path corresponding to the alias, false if the root alias is not previously registered.
|
|
|
- * @throws InvalidArgumentException if the alias is invalid while $throwException is true.
|
|
|
- * @see setAlias()
|
|
|
- */
|
|
|
- public static function getAlias($alias, $throwException = true)
|
|
|
- {
|
|
|
- if (strncmp($alias, '@', 1)) {
|
|
|
- // not an alias
|
|
|
- return $alias;
|
|
|
- }
|
|
|
-
|
|
|
- $pos = strpos($alias, '/');
|
|
|
- $root = $pos === false ? $alias : substr($alias, 0, $pos);
|
|
|
-
|
|
|
- if (isset(static::$aliases[$root])) {
|
|
|
- if (is_string(static::$aliases[$root])) {
|
|
|
- return $pos === false ? static::$aliases[$root] : static::$aliases[$root] . substr($alias, $pos);
|
|
|
- }
|
|
|
-
|
|
|
- foreach (static::$aliases[$root] as $name => $path) {
|
|
|
- if (strpos($alias . '/', $name . '/') === 0) {
|
|
|
- return $path . substr($alias, strlen($name));
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if ($throwException) {
|
|
|
- throw new InvalidArgumentException("Invalid path alias: $alias");
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Returns the root alias part of a given alias.
|
|
|
- * A root alias is an alias that has been registered via [[setAlias()]] previously.
|
|
|
- * If a given alias matches multiple root aliases, the longest one will be returned.
|
|
|
- * @param string $alias the alias
|
|
|
- * @return string|bool the root alias, or false if no root alias is found
|
|
|
- */
|
|
|
- public static function getRootAlias($alias)
|
|
|
- {
|
|
|
- $pos = strpos($alias, '/');
|
|
|
- $root = $pos === false ? $alias : substr($alias, 0, $pos);
|
|
|
-
|
|
|
- if (isset(static::$aliases[$root])) {
|
|
|
- if (is_string(static::$aliases[$root])) {
|
|
|
- return $root;
|
|
|
- }
|
|
|
-
|
|
|
- foreach (static::$aliases[$root] as $name => $path) {
|
|
|
- if (strpos($alias . '/', $name . '/') === 0) {
|
|
|
- return $name;
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return false;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Registers a path alias.
|
|
|
- *
|
|
|
- * A path alias is a short name representing a long path (a file path, a URL, etc.)
|
|
|
- * For example, we use '@yii' as the alias of the path to the Yii framework directory.
|
|
|
- *
|
|
|
- * A path alias must start with the character '@' so that it can be easily differentiated
|
|
|
- * from non-alias paths.
|
|
|
- *
|
|
|
- * Note that this method does not check if the given path exists or not. All it does is
|
|
|
- * to associate the alias with the path.
|
|
|
- *
|
|
|
- * Any trailing '/' and '\' characters in the given path will be trimmed.
|
|
|
- *
|
|
|
- * See the [guide article on aliases](guide:concept-aliases) for more information.
|
|
|
- *
|
|
|
- * @param string $alias the alias name (e.g. "@yii"). It must start with a '@' character.
|
|
|
- * It may contain the forward slash '/' which serves as boundary character when performing
|
|
|
- * alias translation by [[getAlias()]].
|
|
|
- * @param string $path the path corresponding to the alias. If this is null, the alias will
|
|
|
- * be removed. Trailing '/' and '\' characters will be trimmed. This can be
|
|
|
- *
|
|
|
- * - a directory or a file path (e.g. `/tmp`, `/tmp/main.txt`)
|
|
|
- * - a URL (e.g. `http://www.yiiframework.com`)
|
|
|
- * - a path alias (e.g. `@yii/base`). In this case, the path alias will be converted into the
|
|
|
- * actual path first by calling [[getAlias()]].
|
|
|
- *
|
|
|
- * @throws InvalidArgumentException if $path is an invalid alias.
|
|
|
- * @see getAlias()
|
|
|
- */
|
|
|
- public static function setAlias($alias, $path)
|
|
|
- {
|
|
|
- if (strncmp($alias, '@', 1)) {
|
|
|
- $alias = '@' . $alias;
|
|
|
- }
|
|
|
- $pos = strpos($alias, '/');
|
|
|
- $root = $pos === false ? $alias : substr($alias, 0, $pos);
|
|
|
- if ($path !== null) {
|
|
|
- $path = strncmp($path, '@', 1) ? rtrim($path, '\\/') : static::getAlias($path);
|
|
|
- if (!isset(static::$aliases[$root])) {
|
|
|
- if ($pos === false) {
|
|
|
- static::$aliases[$root] = $path;
|
|
|
- } else {
|
|
|
- static::$aliases[$root] = [$alias => $path];
|
|
|
- }
|
|
|
- } elseif (is_string(static::$aliases[$root])) {
|
|
|
- if ($pos === false) {
|
|
|
- static::$aliases[$root] = $path;
|
|
|
- } else {
|
|
|
- static::$aliases[$root] = [
|
|
|
- $alias => $path,
|
|
|
- $root => static::$aliases[$root],
|
|
|
- ];
|
|
|
- }
|
|
|
- } else {
|
|
|
- static::$aliases[$root][$alias] = $path;
|
|
|
- krsort(static::$aliases[$root]);
|
|
|
- }
|
|
|
- } elseif (isset(static::$aliases[$root])) {
|
|
|
- if (is_array(static::$aliases[$root])) {
|
|
|
- unset(static::$aliases[$root][$alias]);
|
|
|
- } elseif ($pos === false) {
|
|
|
- unset(static::$aliases[$root]);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Class autoload loader.
|
|
|
- *
|
|
|
- * This method is invoked automatically when PHP sees an unknown class.
|
|
|
- * The method will attempt to include the class file according to the following procedure:
|
|
|
- *
|
|
|
- * 1. Search in [[classMap]];
|
|
|
- * 2. If the class is namespaced (e.g. `yii\base\Component`), it will attempt
|
|
|
- * to include the file associated with the corresponding path alias
|
|
|
- * (e.g. `@yii/base/Component.php`);
|
|
|
- *
|
|
|
- * This autoloader allows loading classes that follow the [PSR-4 standard](http://www.php-fig.org/psr/psr-4/)
|
|
|
- * and have its top-level namespace or sub-namespaces defined as path aliases.
|
|
|
- *
|
|
|
- * Example: When aliases `@yii` and `@yii/bootstrap` are defined, classes in the `yii\bootstrap` namespace
|
|
|
- * will be loaded using the `@yii/bootstrap` alias which points to the directory where bootstrap extension
|
|
|
- * files are installed and all classes from other `yii` namespaces will be loaded from the yii framework directory.
|
|
|
- *
|
|
|
- * Also the [guide section on autoloading](guide:concept-autoloading).
|
|
|
- *
|
|
|
- * @param string $className the fully qualified class name without a leading backslash "\"
|
|
|
- * @throws UnknownClassException if the class does not exist in the class file
|
|
|
- */
|
|
|
- public static function autoload($className)
|
|
|
- {
|
|
|
- if (isset(static::$classMap[$className])) {
|
|
|
- $classFile = static::$classMap[$className];
|
|
|
- if ($classFile[0] === '@') {
|
|
|
- $classFile = static::getAlias($classFile);
|
|
|
- }
|
|
|
- } elseif (strpos($className, '\\') !== false) {
|
|
|
- $classFile = static::getAlias('@' . str_replace('\\', '/', $className) . '.php', false);
|
|
|
- if ($classFile === false || !is_file($classFile)) {
|
|
|
- return;
|
|
|
- }
|
|
|
- } else {
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- include $classFile;
|
|
|
-
|
|
|
- if (YII_DEBUG && !class_exists($className, false) && !interface_exists($className, false) && !trait_exists($className, false)) {
|
|
|
- throw new UnknownClassException("Unable to find '$className' in file: $classFile. Namespace missing?");
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Creates a new object using the given configuration.
|
|
|
- *
|
|
|
- * You may view this method as an enhanced version of the `new` operator.
|
|
|
- * The method supports creating an object based on a class name, a configuration array or
|
|
|
- * an anonymous function.
|
|
|
- *
|
|
|
- * Below are some usage examples:
|
|
|
- *
|
|
|
- * ```php
|
|
|
- * // create an object using a class name
|
|
|
- * $object = Yii::createObject('yii\db\Connection');
|
|
|
- *
|
|
|
- * // create an object using a configuration array
|
|
|
- * $object = Yii::createObject([
|
|
|
- * 'class' => 'yii\db\Connection',
|
|
|
- * 'dsn' => 'mysql:host=127.0.0.1;dbname=demo',
|
|
|
- * 'username' => 'root',
|
|
|
- * 'password' => '',
|
|
|
- * 'charset' => 'utf8',
|
|
|
- * ]);
|
|
|
- *
|
|
|
- * // create an object with two constructor parameters
|
|
|
- * $object = \Yii::createObject('MyClass', [$param1, $param2]);
|
|
|
- * ```
|
|
|
- *
|
|
|
- * Using [[\yii\di\Container|dependency injection container]], this method can also identify
|
|
|
- * dependent objects, instantiate them and inject them into the newly created object.
|
|
|
- *
|
|
|
- * @param string|array|callable $type the object type. This can be specified in one of the following forms:
|
|
|
- *
|
|
|
- * - a string: representing the class name of the object to be created
|
|
|
- * - a configuration array: the array must contain a `class` element which is treated as the object class,
|
|
|
- * and the rest of the name-value pairs will be used to initialize the corresponding object properties
|
|
|
- * - a PHP callable: either an anonymous function or an array representing a class method (`[$class or $object, $method]`).
|
|
|
- * The callable should return a new instance of the object being created.
|
|
|
- *
|
|
|
- * @param array $params the constructor parameters
|
|
|
- * @return object the created object
|
|
|
- * @throws InvalidConfigException if the configuration is invalid.
|
|
|
- * @see \yii\di\Container
|
|
|
- */
|
|
|
- public static function createObject($type, array $params = [])
|
|
|
- {
|
|
|
- if (is_string($type)) {
|
|
|
- return static::$container->get($type, $params);
|
|
|
- } elseif (is_array($type) && isset($type['class'])) {
|
|
|
- $class = $type['class'];
|
|
|
- unset($type['class']);
|
|
|
- return static::$container->get($class, $params, $type);
|
|
|
- } elseif (is_callable($type, true)) {
|
|
|
- return static::$container->invoke($type, $params);
|
|
|
- } elseif (is_array($type)) {
|
|
|
- throw new InvalidConfigException('Object configuration must be an array containing a "class" element.');
|
|
|
- }
|
|
|
-
|
|
|
- throw new InvalidConfigException('Unsupported configuration type: ' . gettype($type));
|
|
|
- }
|
|
|
-
|
|
|
- private static $_logger;
|
|
|
-
|
|
|
- /**
|
|
|
- * @return Logger message logger
|
|
|
- */
|
|
|
- public static function getLogger()
|
|
|
- {
|
|
|
- if (self::$_logger !== null) {
|
|
|
- return self::$_logger;
|
|
|
- }
|
|
|
-
|
|
|
- return self::$_logger = static::createObject('yii\log\Logger');
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Sets the logger object.
|
|
|
- * @param Logger $logger the logger object.
|
|
|
- */
|
|
|
- public static function setLogger($logger)
|
|
|
- {
|
|
|
- self::$_logger = $logger;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Logs a debug message.
|
|
|
- * Trace messages are logged mainly for development purpose to see
|
|
|
- * the execution work flow of some code. This method will only log
|
|
|
- * a message when the application is in debug mode.
|
|
|
- * @param string|array $message the message to be logged. This can be a simple string or a more
|
|
|
- * complex data structure, such as array.
|
|
|
- * @param string $category the category of the message.
|
|
|
- * @since 2.0.14
|
|
|
- */
|
|
|
- public static function debug($message, $category = 'application')
|
|
|
- {
|
|
|
- if (YII_DEBUG) {
|
|
|
- static::getLogger()->log($message, Logger::LEVEL_TRACE, $category);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Alias of [[debug()]].
|
|
|
- * @param string|array $message the message to be logged. This can be a simple string or a more
|
|
|
- * complex data structure, such as array.
|
|
|
- * @param string $category the category of the message.
|
|
|
- * @deprecated since 2.0.14. Use [[debug()]] instead.
|
|
|
- */
|
|
|
- public static function trace($message, $category = 'application')
|
|
|
- {
|
|
|
- static::debug($message, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Logs an error message.
|
|
|
- * An error message is typically logged when an unrecoverable error occurs
|
|
|
- * during the execution of an application.
|
|
|
- * @param string|array $message the message to be logged. This can be a simple string or a more
|
|
|
- * complex data structure, such as array.
|
|
|
- * @param string $category the category of the message.
|
|
|
- */
|
|
|
- public static function error($message, $category = 'application')
|
|
|
- {
|
|
|
- static::getLogger()->log($message, Logger::LEVEL_ERROR, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Logs a warning message.
|
|
|
- * A warning message is typically logged when an error occurs while the execution
|
|
|
- * can still continue.
|
|
|
- * @param string|array $message the message to be logged. This can be a simple string or a more
|
|
|
- * complex data structure, such as array.
|
|
|
- * @param string $category the category of the message.
|
|
|
- */
|
|
|
- public static function warning($message, $category = 'application')
|
|
|
- {
|
|
|
- static::getLogger()->log($message, Logger::LEVEL_WARNING, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Logs an informative message.
|
|
|
- * An informative message is typically logged by an application to keep record of
|
|
|
- * something important (e.g. an administrator logs in).
|
|
|
- * @param string|array $message the message to be logged. This can be a simple string or a more
|
|
|
- * complex data structure, such as array.
|
|
|
- * @param string $category the category of the message.
|
|
|
- */
|
|
|
- public static function info($message, $category = 'application')
|
|
|
- {
|
|
|
- static::getLogger()->log($message, Logger::LEVEL_INFO, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Marks the beginning of a code block for profiling.
|
|
|
- *
|
|
|
- * This has to be matched with a call to [[endProfile]] with the same category name.
|
|
|
- * The begin- and end- calls must also be properly nested. For example,
|
|
|
- *
|
|
|
- * ```php
|
|
|
- * \Yii::beginProfile('block1');
|
|
|
- * // some code to be profiled
|
|
|
- * \Yii::beginProfile('block2');
|
|
|
- * // some other code to be profiled
|
|
|
- * \Yii::endProfile('block2');
|
|
|
- * \Yii::endProfile('block1');
|
|
|
- * ```
|
|
|
- * @param string $token token for the code block
|
|
|
- * @param string $category the category of this log message
|
|
|
- * @see endProfile()
|
|
|
- */
|
|
|
- public static function beginProfile($token, $category = 'application')
|
|
|
- {
|
|
|
- static::getLogger()->log($token, Logger::LEVEL_PROFILE_BEGIN, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Marks the end of a code block for profiling.
|
|
|
- * This has to be matched with a previous call to [[beginProfile]] with the same category name.
|
|
|
- * @param string $token token for the code block
|
|
|
- * @param string $category the category of this log message
|
|
|
- * @see beginProfile()
|
|
|
- */
|
|
|
- public static function endProfile($token, $category = 'application')
|
|
|
- {
|
|
|
- static::getLogger()->log($token, Logger::LEVEL_PROFILE_END, $category);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Returns an HTML hyperlink that can be displayed on your Web page showing "Powered by Yii Framework" information.
|
|
|
- * @return string an HTML hyperlink that can be displayed on your Web page showing "Powered by Yii Framework" information
|
|
|
- * @deprecated since 2.0.14, this method will be removed in 2.1.0.
|
|
|
- */
|
|
|
- public static function powered()
|
|
|
- {
|
|
|
- return \Yii::t('yii', 'Powered by {yii}', [
|
|
|
- 'yii' => '<a href="http://www.yiiframework.com/" rel="external">' . \Yii::t('yii',
|
|
|
- 'Yii Framework') . '</a>',
|
|
|
- ]);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Translates a message to the specified language.
|
|
|
- *
|
|
|
- * This is a shortcut method of [[\yii\i18n\I18N::translate()]].
|
|
|
- *
|
|
|
- * The translation will be conducted according to the message category and the target language will be used.
|
|
|
- *
|
|
|
- * You can add parameters to a translation message that will be substituted with the corresponding value after
|
|
|
- * translation. The format for this is to use curly brackets around the parameter name as you can see in the following example:
|
|
|
- *
|
|
|
- * ```php
|
|
|
- * $username = 'Alexander';
|
|
|
- * echo \Yii::t('app', 'Hello, {username}!', ['username' => $username]);
|
|
|
- * ```
|
|
|
- *
|
|
|
- * Further formatting of message parameters is supported using the [PHP intl extensions](http://www.php.net/manual/en/intro.intl.php)
|
|
|
- * message formatter. See [[\yii\i18n\I18N::translate()]] for more details.
|
|
|
- *
|
|
|
- * @param string $category the message category.
|
|
|
- * @param string $message the message to be translated.
|
|
|
- * @param array $params the parameters that will be used to replace the corresponding placeholders in the message.
|
|
|
- * @param string $language the language code (e.g. `en-US`, `en`). If this is null, the current
|
|
|
- * [[\yii\base\Application::language|application language]] will be used.
|
|
|
- * @return string the translated message.
|
|
|
- */
|
|
|
- public static function t($category, $message, $params = [], $language = null)
|
|
|
- {
|
|
|
- if (static::$app !== null) {
|
|
|
- return static::$app->getI18n()->translate($category, $message, $params, $language ?: static::$app->language);
|
|
|
- }
|
|
|
-
|
|
|
- $placeholders = [];
|
|
|
- foreach ((array) $params as $name => $value) {
|
|
|
- $placeholders['{' . $name . '}'] = $value;
|
|
|
- }
|
|
|
-
|
|
|
- return ($placeholders === []) ? $message : strtr($message, $placeholders);
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Configures an object with the initial property values.
|
|
|
- * @param object $object the object to be configured
|
|
|
- * @param array $properties the property initial values given in terms of name-value pairs.
|
|
|
- * @return object the object itself
|
|
|
- */
|
|
|
- public static function configure($object, $properties)
|
|
|
- {
|
|
|
- foreach ($properties as $name => $value) {
|
|
|
- $object->$name = $value;
|
|
|
- }
|
|
|
-
|
|
|
- return $object;
|
|
|
- }
|
|
|
-
|
|
|
- /**
|
|
|
- * Returns the public member variables of an object.
|
|
|
- * This method is provided such that we can get the public member variables of an object.
|
|
|
- * It is different from "get_object_vars()" because the latter will return private
|
|
|
- * and protected variables if it is called within the object itself.
|
|
|
- * @param object $object the object to be handled
|
|
|
- * @return array the public member variables of the object
|
|
|
- */
|
|
|
- public static function getObjectVars($object)
|
|
|
- {
|
|
|
- return get_object_vars($object);
|
|
|
- }
|
|
|
-}
|
|
|
+<?php //000a0
|
|
|
+// /**
|
|
|
+// * @link http://www.lacew.com/
|
|
|
+// * @copyright Copyright (c) 2015 Centrenda IT LLC
|
|
|
+// * @license http://www.lacew.com/license/
|
|
|
+// */
|
|
|
+
|
|
|
+?>
|
|
|
+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
|
|
|
++uC=
|