Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Neither the name of Yii Software LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
Вот если там есть блоки кода, выглядящие как 1 в 1 спортированные с РНР на JS — тогда ага, ой.:-)
/**
* 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 '@jii' is registered as the alias to the Jii framework directory,
* say '/path/to/jii'. The alias '@jii/web' would then be translated into '/path/to/jii/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.
*
* @param {string} alias the alias to be translated.
* @param {boolean} [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|boolean} the path corresponding to the alias, false if the root alias is not previously registered.
* @throws {Jii.exceptions.InvalidParamException} if the alias is invalid while throwException is true.
* @see setAlias()
*/
getAlias: function (alias, throwException) {
if (Jii._.isUndefined(throwException)) {
throwException = true;
}
if (alias.indexOf('@') !== 0) {
return alias;
}
var index = alias.indexOf('/');
var root = index === -1 ? alias : alias.substr(0, index);
if (Jii._.has(this.aliases, root)) {
if (Jii._.isString(this.aliases[root])) {
return this.aliases[root] + (index !== -1 ? alias.substr(index) : '');
}
var finedPath = null;
Jii._.each(this.aliases[root], function (path, name) {
var testAlias = alias + '/';
if (testAlias.indexOf(name + '/') === 0) {
finedPath = path + alias.substr(name.length);
return false;
}
});
if (finedPath !== null) {
return finedPath;
}
}
if (throwException) {
throw new Jii.exceptions.InvalidParamException('Invalid path alias: ' + alias);
}
return false;
}
/**
* 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.
*
* @param string $alias the alias to be translated.
* @param boolean $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|boolean the path corresponding to the alias, false if the root alias is not previously registered.
* @throws InvalidParamException 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);
} else {
foreach (static::$aliases[$root] as $name => $path) {
if (strpos($alias . '/', $name . '/') === 0) {
return $path . substr($alias, strlen($name));
}
}
}
}
if ($throwException) {
throw new InvalidParamException("Invalid path alias: $alias");
} else {
return false;
}
}
populate: function (rows) {
if (this._indexBy === null) {
return rows;
}
var result = {};
Jii._.each(rows, Jii._.bind(function(row) {
var key = Jii._.isString(this._indexBy) ?
row[this._indexBy] :
this._indexBy(row);
result[key] = row;
}, this));
return result;
},
Jii: Полноценный Query Builder для Node.js с API от Yii 2