CAssetManager
| Пакет | system.web |
|---|---|
| Наследование | class CAssetManager » CApplicationComponent » CComponent |
| Реализует | IApplicationComponent |
| С версии | 1.0 |
| Исходный код | framework/web/CAssetManager.php |
Он достигает этой цели, копируя активы в веб-доступный каталог и возвращает соответствующий URL для доступа к ним.
Для публикации актива просто вызовите publish().
Веб-доступный каталог, содержащий опубликованные файлы, задаётся свойством basePath, которое по умолчанию имеет значение "assets" в каталоге, содержащем скрипт входа в приложение. Свойство baseUrl относится к URL для доступа к basePath.
Общественные свойства
| Свойство | Тип | Описание | Определено |
|---|---|---|---|
| basePath | строка | корневой каталог, хранящий опубликованные файлы активов. | CAssetManager |
| baseUrl | строка | базовый URL, с которого можно получить доступ к опубликованным файлам активов. | CAssetManager |
| behaviors | массив | поведения, которые должны быть прикреплены к этому компоненту. | CApplicationComponent |
| excludeFiles | массив | список каталогов и файлов, которые должны быть исключены из процесса публикации. | CAssetManager |
| forceCopy | логическое значение | следует ли копировать файлы и каталоги активов, даже если они уже были опубликованы ранее. | CAssetManager |
| isInitialized | логическое значение | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| linkAssets | логическое значение | использовать ли символическую ссылку для публикации файлов активов. | CAssetManager |
| newDirMode | целое число | разрешение для вновь созданных каталогов активов. | CAssetManager |
| newFileMode | целое число | разрешение для вновь созданных файлов активов. | CAssetManager |
Общественные методы
| Метод | Описание | Определено |
|---|---|---|
| __call() | Вызывает метод, который не является методом класса. | CComponent |
| __get() | Возвращает значение свойства, список обработчиков событий или поведение на основе его имени. | CComponent |
| __isset() | Проверяет, является ли значение свойства нулевым. | CComponent |
| __set() | Устанавливает значение свойства компонента. | CComponent |
| __unset() | Устанавливает свойство компонента в значение null. | CComponent |
| asa() | Возвращает объект поведения с указанным именем. | CComponent |
| attachBehavior() | Присоединяет поведение к этому компоненту. | CComponent |
| attachBehaviors() | Присоединяет список поведений к компоненту. | CComponent |
| attachEventHandler() | Присоединяет обработчик событий к событию. | CComponent |
| canGetProperty() | Определяет, можно ли прочитать свойство. | CComponent |
| canSetProperty() | Определяет, можно ли установить свойство. | CComponent |
| detachBehavior() | Отсоединяет поведение от компонента. | CComponent |
| detachBehaviors() | Отсоединяет все поведения от компонента. | CComponent |
| detachEventHandler() | Отсоединяет существующий обработчик событий. | CComponent |
| disableBehavior() | Отключает присоединённое поведение. | CComponent |
| disableBehaviors() | Отключает все присоединённые поведения к этому компоненту. | CComponent |
| enableBehavior() | Включает присоединённое поведение. | CComponent |
| enableBehaviors() | Включает все присоединённые к этому компоненту поведения. | CComponent |
| evaluateExpression() | Вычисляет выражение PHP или обратный вызов в контексте этого компонента. | CComponent |
| getBasePath() | Возвращает корневой каталог, хранящий опубликованные файлы активов. По умолчанию 'WebRoot/assets'. | CAssetManager |
| getBaseUrl() | Возвращает базовый URL, с которого можно получить доступ к опубликованным файлам активов. Обратите внимание, что конечные слэши удаляются. По умолчанию '/AppBaseUrl/assets'. | CAssetManager |
| getEventHandlers() | Возвращает список прикреплённых обработчиков событий для события. | CComponent |
| getIsInitialized() | Проверяет, был ли инициализирован этот компонент приложения. | CApplicationComponent |
| getPublishedPath() | Возвращает опубликованный путь к файлу. | CAssetManager |
| getPublishedUrl() | Возвращает URL опубликованного файла. | CAssetManager |
| hasEvent() | Определяет, определено ли событие. | CComponent |
| hasEventHandler() | Проверяет, есть ли у указанного события прикреплённые обработчики. | CComponent |
| hasProperty() | Определяет, определено ли свойство. | CComponent |
| init() | Инициализирует компонент приложения. | CApplicationComponent |
| publish() | Опубликовывает файл или каталог. | CAssetManager |
| raiseEvent() | Возбуждает событие. | CComponent |
| setBasePath() | Устанавливает корневой каталог, хранящий опубликованные файлы активов. | CAssetManager |
| setBaseUrl() | Устанавливает базовый URL, с которого можно получить доступ к опубликованным файлам активов. | CAssetManager |
Защищённые методы
| Метод | Описание | Определено |
|---|---|---|
| generatePath() | Генерирует сегменты пути, относительные к basePath. | CAssetManager |
| hash() | Генерирует хэш CRC32 для пути к каталогу. Коллизии выше | CAssetManager |
Подробное описание свойств
basePath свойство
public string getBasePath()
public void setBasePath(string $value)
корневой каталог, хранящий опубликованные файлы активов. По умолчанию 'WebRoot/assets'.
baseUrl свойство
public string getBaseUrl()
public void setBaseUrl(string $value)
базовый URL, по которому можно получить доступ к опубликованным файлам ресурсов. Обратите внимание, что конечные слеши удаляются. По умолчанию равно '/AppBaseUrl/assets'.
excludeFiles свойство (доступно начиная с v1.1.6)
public array $excludeFiles;
список каталогов и файлов, которые должны быть исключены из процесса публикации. По умолчанию исключаются только файлы '.svn' и '.gitignore'. Этот параметр не имеет эффекта, если включен linkAssets.
forceCopy свойство (доступно начиная с v1.1.11)
public boolean $forceCopy;
определяет, нужно ли копировать файлы и каталоги ресурсов, даже если они уже были опубликованы ранее. Это свойство используется только на стадии разработки. Основной случай использования этого свойства — когда необходимо всегда форсировать копирование исходных ресурсов, изменив только одно значение, без необходимости поиска вызовов метода publish по всему коду приложения. Также оно полезно в операционных системах, которые не полностью поддерживают символические ссылки (поэтому нельзя использовать $linkAssets) или мы не хотим их использовать. Это свойство устанавливает значение параметра $forceCopy в методе publish по умолчанию. Значение по умолчанию этого свойства — false, что означает, что ресурсы будут опубликованы только в том случае, если они не существуют в каталоге ресурсов webroot.
Обратите внимание, что это свойство не может быть истинным, когда свойство $linkAssets также имеет значение true. В противном случае будет выброшено исключение. Одновременное использование обоих свойств нелогично, так как оба решают схожие задачи, но разными способами. Для получения более подробной информации см. документацию по $linkAssets.
linkAssets свойство (доступно начиная с v1.1.5)
public boolean $linkAssets;
использовать ли символическую ссылку для публикации файлов ресурсов. По умолчанию false, что означает, что файлы ресурсов копируются в общедоступные папки. Использование символических ссылок обеспечивает, что опубликованные ресурсы всегда будут согласованы с исходными ресурсами. Это особенно полезно во время разработки.
Однако существуют специальные требования для сред хостинга для использования символических ссылок. В частности, символические ссылки поддерживаются только в Linux/Unix и Windows Vista/2008 или выше. Последнее требует PHP 5.3 или выше.
Кроме того, некоторым веб-серверам необходимо правильно настроить доступ к связанным ресурсам для веб-пользователей. Например, для веб-сервера Apache необходимо добавить следующее директиву в конфигурацию для веб-папки:
Options FollowSymLinks
Обратите внимание, что это свойство не может быть истинным, когда свойство $forceCopy также имеет значение true. В противном случае будет выброшено исключение. Одновременное использование обоих свойств нелогично, так как оба решают схожие задачи, но разными способами. Для получения более подробной информации см. документацию по $forceCopy.
newDirMode свойство (доступно начиная с v1.1.8)
public integer $newDirMode;
права доступа, которые должны быть установлены для вновь созданных каталогов ресурсов. Это значение будет использовано функцией PHP chmod. По умолчанию 0777, что означает, что каталог может быть прочитан, записан и выполнен всеми пользователями.
newFileMode свойство (доступно начиная с v1.1.8)
public integer $newFileMode;
права доступа, которые должны быть установлены для вновь созданных файлов ресурсов. Это значение будет использовано функцией PHP chmod. По умолчанию 0666, что означает, что файл может быть прочитан и записан всеми пользователями.
Подробное описание методов
generatePath() метод (доступно начиная с v1.1.13)
protected string generatePath(string $file, bool $hashByName=false) | ||
| $file | строка | для которого будет создан общедоступный путь. |
| $hashByName | логическое | указывает, следует ли называть опубликованный каталог с использованием хэшированного имени файла. |
| {return} | строка | сегменты пути без basePath. |
protected function generatePath($file,$hashByName=false)
{
if (is_file($file))
$pathForHashing=$hashByName ? dirname($file) : dirname($file).filemtime($file);
else
$pathForHashing=$hashByName ? $file : $file.filemtime($file);
return $this->hash($pathForHashing);
}
Генерирует сегменты пути, относящиеся к basePath.
getBasePath() метод
public string getBasePath() | ||
| {return} | строка | корневой каталог, хранящий опубликованные файлы ресурсов. По умолчанию 'WebRoot/assets'. |
public function getBasePath()
{
if($this->_basePath===null)
{
$request=Yii::app()->getRequest();
$this->setBasePath(dirname($request->getScriptFile()).DIRECTORY_SEPARATOR.self::DEFAULT_BASEPATH);
}
return $this->_basePath;
}
getBaseUrl() метод
public string getBaseUrl() | ||
| {return} | строка | базовый URL, по которому можно получить доступ к опубликованным файлам ресурсов. Обратите внимание, что конечные слеши удаляются. По умолчанию равно '/AppBaseUrl/assets'. |
public function getBaseUrl()
{
if($this->_baseUrl===null)
{
$request=Yii::app()->getRequest();
$this->setBaseUrl($request->getBaseUrl().'/'.self::DEFAULT_BASEPATH);
}
return $this->_baseUrl;
}
getPublishedPath() метод
public string getPublishedPath(string $path, boolean $hashByName=false) | ||
| $path | строка | путь к каталогу или файлу, подлежащему публикации |
| $hashByName | булево | указывает, следует ли называть опубликованный каталог с использованием хэшированного имени файла. Если false, имя будет хэшем, взятым из имени родительского каталога пути к публикуемому файлу и времени изменения пути. По умолчанию false. Установите true, если путь, который публикуется, используется несколькими расширениями. |
| {return} | строка | путь к опубликованному файлу. Ложь, если файл или каталог не существует |
public function getPublishedPath($path,$hashByName=false)
{
if(is_string($path) && ($path=realpath($path))!==false)
{
$base=$this->getBasePath().DIRECTORY_SEPARATOR.$this->generatePath($path,$hashByName);
return is_file($path) ? $base.DIRECTORY_SEPARATOR.basename($path) : $base ;
}
else
return false;
}
Возвращает опубликованный путь к файлу или каталогу. Этот метод не выполняет никакой публикации. Он просто сообщает, опубликован ли файл или каталог и где он будет находиться.
getPublishedUrl() метод
public string getPublishedUrl(string $path, boolean $hashByName=false) | ||
| $path | строка | путь к каталогу или файлу, подлежащему публикации |
| $hashByName | булево | указывает, следует ли называть опубликованный каталог с использованием хэшированного имени файла. Если false, имя будет хэшем, взятым из имени родительского каталога пути к публикуемому файлу и времени изменения пути. По умолчанию false. Установите true, если путь, который публикуется, используется несколькими расширениями. |
| {return} | строка | URL опубликованного файла или каталога. Ложь, если файл или каталог не существует. |
public function getPublishedUrl($path,$hashByName=false)
{
if(isset($this->_published[$path]))
return $this->_published[$path];
if(is_string($path) && ($path=realpath($path))!==false)
{
$base=$this->getBaseUrl().'/'.$this->generatePath($path,$hashByName);
return is_file($path) ? $base.'/'.basename($path) : $base;
}
else
return false;
}
Возвращает URL опубликованного файла или каталога. Этот метод не выполняет никакой публикации. Он просто сообщает, опубликован ли файл и какой URL будет использоваться для доступа к нему.
hash() метод
protected string hash(string $path) | ||
| $path | строка | строка, которая должна быть хэширована. |
| {return} | строка | хэшированная строка. |
protected function hash($path)
{
return sprintf('%x',crc32($path.Yii::getVersion()));
}
Генерирует хэш CRC32 для пути к каталогу. Коллизии выше, чем у MD5, но генерируется значительно более короткая строка хэша.
publish() метод
public string publish(string $path, boolean $hashByName=false, integer $level=-1, boolean $forceCopy=NULL) | ||
| $path | string | актив (файл или директория), который должен быть опубликован |
| $hashByName | boolean | определяет, должна ли опубликованная директория быть названа по хешированному имени. Если false, имя будет хешем, взятым из директории пути, который публикуется, и времени изменения пути. По умолчанию false. Установите true, если путь, который публикуется, используется в разных расширениях. |
| $level | integer | уровень рекурсивного копирования, когда актив является директорией. Уровень -1 означает публикацию всех поддиректорий и файлов; Уровень 0 означает публикацию только файлов непосредственно в директории; уровень N означает копирование тех директорий, которые находятся на уровне N вложенности. |
| $forceCopy | boolean | определяет, нужно ли копировать активный файл или директорию, даже если он уже был опубликован ранее. В случае публикации директории старые файлы не будут удалены. Этот параметр устанавливается в true в основном на стадии разработки, когда исходные активы постоянно изменяются. Вследствие этого производительность снижается, что не является проблемой на этапе разработки. Значение по умолчанию этого параметра равно null, что означает, что его значение контролируется свойством класса $forceCopy. Этот параметр доступен с версии 1.1.2. Значение по умолчанию было изменено с версии 1.1.11. Обратите внимание, что этот параметр не может быть true, когда свойство $linkAssets имеет значение true. В противном случае будет выброшено исключение. Использование этого параметра с свойством $linkAssets одновременно нелогично, потому что оба решают похожие задачи, но разными способами. Для получения более подробной информации обратитесь к документации $linkAssets. |
| {return} | string | абсолютный URL опубликованного актива |
public function publish($path,$hashByName=false,$level=-1,$forceCopy=null)
{
if($forceCopy===null)
$forceCopy=$this->forceCopy;
if($forceCopy && $this->linkAssets)
throw new CException(Yii::t('yii','The "forceCopy" and "linkAssets" cannot be both true.'));
if(isset($this->_published[$path]))
return $this->_published[$path];
elseif(is_string($path) && ($src=realpath($path))!==false)
{
$dir=$this->generatePath($src,$hashByName);
$dstDir=$this->getBasePath().DIRECTORY_SEPARATOR.$dir;
if(is_file($src))
{
$fileName=basename($src);
$dstFile=$dstDir.DIRECTORY_SEPARATOR.$fileName;
if(!is_dir($dstDir))
{
mkdir($dstDir,$this->newDirMode,true);
@chmod($dstDir,$this->newDirMode);
}
if($this->linkAssets && !is_file($dstFile)) symlink($src,$dstFile);
elseif(@filemtime($dstFile)<@filemtime($src))
{
copy($src,$dstFile);
@chmod($dstFile,$this->newFileMode);
}
return $this->_published[$path]=$this->getBaseUrl()."/$dir/$fileName";
}
elseif(is_dir($src))
{
if($this->linkAssets && !is_dir($dstDir))
{
symlink($src,$dstDir);
}
elseif(!is_dir($dstDir) || $forceCopy)
{
CFileHelper::copyDirectory($src,$dstDir,array(
'exclude'=>$this->excludeFiles,
'level'=>$level,
'newDirMode'=>$this->newDirMode,
'newFileMode'=>$this->newFileMode,
));
}
return $this->_published[$path]=$this->getBaseUrl().'/'.$dir;
}
}
throw new CException(Yii::t('yii','The asset "{asset}" to be published does not exist.',
array('{asset}'=>$path)));
}
Опубликовывает файл или директорию. Этот метод скопирует указанный актив в доступную по сети директорию и вернет URL для доступа к опубликованному активу.
- Если актив — файл, будет проверено время его последнего изменения, чтобы избежать ненужного копирования;
- Если актив — директория, все файлы и поддиректории внутри нее будут опубликованы рекурсивно. Обратите внимание, что в случае, если $forceCopy равен false, метод проверяет только существование целевой директории, чтобы избежать повторного копирования.
Примечание: В редких случаях может возникнуть состояние гонки, которое приведет к однократному проявлению несущественной проблемы при создании директории, хранящей опубликованные активы. Эту проблему можно полностью избежать, предварительно «затребовав» все ресурсы, которые должны вызвать вызов «publish()», и сделав это на этапе развертывания приложения, прежде чем система начнет работу. Подробнее см. в обсуждении: http://code.google.com/p/yii/issues/detail?id=2579
setBasePath() метод
public void setBasePath(string $value) | ||
| $value | string | корневая директория, хранящая опубликованные файлы актива |
public function setBasePath($value)
{
if(($basePath=realpath($value))!==false && is_dir($basePath) && is_writable($basePath))
$this->_basePath=$basePath;
else
throw new CException(Yii::t('yii','CAssetManager.basePath "{path}" is invalid. Please make sure the directory exists and is writable by the Web server process.',
array('{path}'=>$value)));
}
Устанавливает корневую директорию, хранящую опубликованные файлы актива.
setBaseUrl() метод
public void setBaseUrl(string $value) | ||
| $value | string | базовый URL, с которого можно получить доступ к опубликованным файлам актива |
public function setBaseUrl($value)
{
$this->_baseUrl=rtrim($value,'/');
}
© 2008–2017 by Yii Software LLC
Licensed under the three clause BSD license.
http://www.yiiframework.com/doc/api/1.1/CAssetManager