Esempio n. 1
0
 /**
  * 发布文件夹
  *
  * @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)
 {
     $dir = $this->hash($src);
     $dstDir = $this->basePath . DIRECTORY_SEPARATOR . $dir;
     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];
 }