getDestinationPath(); foreach ($this->files as $file) { $this->mirrorFile($file); } foreach ($this->directories as $directory) { $this->mirrorDirectory($directory); } foreach ($this->wildcards as $wildcard) { $this->mirrorWildcard($wildcard); } $this->output->writeln('Mirror complete!'); } protected function mirrorFile($file) { $this->output->writeln(sprintf(' - Mirroring: %s', $file)); $src = base_path().'/'.$file; $dest = $this->getDestinationPath().'/'.$file; if (!File::isFile($src) || File::isFile($dest)) return false; symlink($src, $dest); } protected function mirrorDirectory($directory) { $this->output->writeln(sprintf(' - Mirroring: %s', $directory)); $src = base_path().'/'.$directory; $dest = $this->getDestinationPath().'/'.$directory; if (!File::isDirectory($src) || File::isDirectory($dest)) return false; if (!File::isDirectory(dirname($dest))) File::makeDirectory(dirname($dest), 0755, true); symlink($src, $dest); } protected function mirrorWildcard($wildcard) { if (strpos($wildcard, '*') === false) { return $this->mirrorDirectory($wildcard); } list($start, $end) = explode('*', $wildcard, 2); $startDir = base_path().'/'.$start; if (!File::isDirectory($startDir)) return false; foreach (File::directories($startDir) as $directory) { $this->mirrorWildcard($start.basename($directory).$end); } } protected function getDestinationPath() { if ($this->destinationPath !== null) { return $this->destinationPath; } $destPath = $this->argument('destination'); if (realpath($destPath) === false) { $destPath = base_path() . '/' . $destPath; } if (!File::isDirectory($destPath)) { File::makeDirectory($destPath, 0755, true); } $this->output->writeln(sprintf('Destination: %s', $destPath)); return $this->destinationPath = $destPath; } /** * Get the console command arguments. */ protected function getArguments() { return [ ['destination', InputArgument::REQUIRED, 'The destination path relative to the current directory. Eg: public/'], ]; } /** * Get the console command options. */ protected function getOptions() { return []; } }