Пример #1
0
 public function publish($path, $level = -1)
 {
     $assetPath = $this->generatePath($path);
     if (isset($this->_published[$path])) {
         return $this->_published[$path];
     }
     if (is_dir($this->getBasePath() . '/' . $assetPath) && ($this->fastCheck || FileHelper::md5Directory($this->getBasePath() . '/' . $assetPath) == FileHelper::md5Directory($path))) {
         return $this->getBaseUrl() . '/' . $assetPath;
     } else {
         if (!is_dir($this->getBasePath() . '/' . $assetPath)) {
             mkdir($this->getBasePath() . '/' . $assetPath, 0777, true);
         }
         FileHelper::copyDirectory($path, $this->getBasePath() . '/' . $assetPath, 0777, $level);
         $this->_published[$path] = $this->getBaseUrl() . '/' . $assetPath;
         return $this->_published[$path];
     }
 }
 /**
  * Publishes a directory.
  * @param string $src the asset directory to be published
  * @param array $options 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 and the URL that the asset is published as.
  * @throws InvalidParamException if the asset to be published does not exist.
  */
 protected function publishDirectory($src, $options)
 {
     \Yii::trace("src:{$src} option:" . print_r($options, true), __METHOD__);
     $dir = $this->hash($src);
     $dstDir = $this->basePath . DIRECTORY_SEPARATOR . $dir;
     \Yii::trace("dstDir:{$dstDir} ", __METHOD__);
     if ($this->linkAssets) {
         if (!is_dir($dstDir)) {
             symlink($src, $dstDir);
         }
     } elseif (!empty($options['forceCopy']) || $this->forceCopy && !isset($options['forceCopy']) || !is_dir($dstDir)) {
         $opts = array_merge($options, ['dirMode' => $this->dirMode, 'fileMode' => $this->fileMode]);
         if (!isset($opts['beforeCopy'])) {
             if ($this->beforeCopy !== null) {
                 $opts['beforeCopy'] = $this->beforeCopy;
             } else {
                 $opts['beforeCopy'] = function ($from, $to) {
                     return strncmp(basename($from), '.', 1) !== 0;
                 };
             }
         }
         if (!isset($opts['afterCopy']) && $this->afterCopy !== null) {
             $opts['afterCopy'] = $this->afterCopy;
         }
         FileHelper::copyDirectory($src, $dstDir, $opts);
     }
     return [$dstDir, $this->baseUrl . '/' . $dir];
 }