container = $container; $this->directorySeparator = $directorySeparator; } /** * Build an array of breadcrumbs for a given path. * * @param string $path * * @return array */ public function __invoke(string $path) { return Str::explode($path, $this->directorySeparator)->diff( explode($this->directorySeparator, $this->container->get('base_path')) )->filter(static function (string $crumb): bool { return ! in_array($crumb, [null, '.']); })->reduce(function (Collection $carry, string $crumb): Collection { return $carry->put($crumb, ltrim( $carry->last() . $this->directorySeparator . rawurlencode($crumb), $this->directorySeparator )); }, new Collection)->map(static function (string $path): string { return sprintf('?dir=%s', $path); }); } }