Spec-Zone.ru › Yii 1.1

CAssetManager

Пакет system.web
Наследование class CAssetManager » CApplicationComponent » CComponent
Реализует IApplicationComponent
С версии 1.0
Исходный код framework/web/CAssetManager.php
CAssetManager — компонент веб-приложения, который управляет файлами (так называемыми активами) и делает их доступными для веб-клиентов.

Он достигает этой цели, копируя активы в веб-доступный каталог и возвращает соответствующий 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.
Исходный код: framework/web/CAssetManager.php#325 (показать)
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'.
Исходный код: framework/web/CAssetManager.php#118 (показать)
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'.
Исходный код: framework/web/CAssetManager.php#146 (показать)
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} строка путь к опубликованному файлу. Ложь, если файл или каталог не существует
Исходный код: framework/web/CAssetManager.php#272 (показать)
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 опубликованного файла или каталога. Ложь, если файл или каталог не существует.
Исходный код: framework/web/CAssetManager.php#294 (показать)
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} строка хэшированная строка.
Исходный код: framework/web/CAssetManager.php#313 (показать)
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 опубликованного актива
Исходный код: framework/web/CAssetManager.php#206 (показать)
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 корневая директория, хранящая опубликованные файлы актива
Исходный код: framework/web/CAssetManager.php#133 (показать)
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, с которого можно получить доступ к опубликованным файлам актива
Исходный код: framework/web/CAssetManager.php#159 (показать)
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

Spec-Zone.ru

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