public publish ( string $path, array $options = [] ) : array | ||
$path | string | the asset (file or directory) to be published |
$options | array | the options to be applied when publishing a directory. The following options are supported: - only: array, list of patterns that the file paths should match if they want to be copied. - except: array, list of patterns that the files or directories should match if they want to be excluded from being copied. - caseSensitive: boolean, whether patterns specified at "only" or "except" should be case sensitive. Defaults to true. - beforeCopy: callback, a PHP callback that is called before copying each sub-directory or file. This overrides [[beforeCopy]] if set. - afterCopy: callback, a PHP callback that is called after a sub-directory or file is successfully copied. This overrides [[afterCopy]] if set. - forceCopy: boolean, whether the directory being published should be copied even if it is found in the target directory. This option is used only when publishing a directory. This overrides [[forceCopy]] if set. |
return | array | the path (directory or file path) and the URL that the asset is published as. |
public function publish($path, $options = [])
{
$path = Yii::getAlias($path);
if (isset($this->_published[$path])) {
return $this->_published[$path];
}
if (!is_string($path) || ($src = realpath($path)) === false) {
throw new InvalidParamException("The file or directory to be published does not exist: {$path}");
}
if (is_file($src)) {
return $this->_published[$path] = $this->publishFile($src);
} else {
return $this->_published[$path] = $this->publishDirectory($src, $options);
}
}
/** * Publishes the asset bundle if its source code is not under Web-accessible directory. * It will also try to convert non-CSS or JS files (e.g. LESS, Sass) into the corresponding * CSS or JS files using [[AssetManager::converter|asset converter]]. * @param \yii\web\AssetManager $am the asset manager to perform the asset publishing */ public function publish($am) { if ($this->sourcePath !== null && !isset($this->basePath, $this->baseUrl)) { list($this->basePath, $this->baseUrl) = $am->publish($this->sourcePath, $this->publishOptions); } $converter = $am->getConverter(); foreach ($this->js as $i => $value) { if (is_array($value)) { if (isset($value['file'])) { $js = $value['file']; } else { continue; } } else { $js = $value; } if (strpos($js, '/') !== 0 && strpos($js, '://') === false) { if (isset($this->basePath, $this->baseUrl)) { $js = $converter->convert($js, $this->basePath); } else { $js = '/' . $js; } if (is_array($value)) { $value['file'] = $js; } else { $value = $js; } $this->js[$i] = $value; } } foreach ($this->css as $i => $value) { if (is_array($value)) { if (isset($value['file'])) { $css = $value['file']; } else { continue; } } else { $css = $value; } if (strpos($css, '/') !== 0 && strpos($css, '://') === false) { if (isset($this->basePath, $this->baseUrl)) { $css = $converter->convert($css, $this->basePath); } else { $css = '/' . $css; } if (is_array($value)) { $value['file'] = $css; } else { $value = $css; } $this->css[$i] = $value; } } }