Получить каталог общего доступа

8

Я хочу сохранить файл программным путем по общедоступному пути, и я хочу знать, как я могу получить Public Directory pathв Drupal 8. В Drupal 7, я бы использовал следующий код.

drupal_realpath(file_default_scheme() . '://')

Что эквивалентно в Drupal 8?

Yuseferi
источник
1
Обе функции на самом деле все еще существуют, drupal_realpath () просто устарела. Если функция устарела, вы почти всегда можете просто посмотреть на ее реализацию, так как она обычно вызывает новый сервис / API. Вы также можете всегда искать записи об изменениях: drupal.org/list-changes/…
Бердир
1
Также два связанных комментария: 1. Вы сохраняете путь по умолчанию . Это может быть публично, но это может быть и что-то еще. Вы можете просто жестко кодировать public: //, если вы всегда хотите, чтобы он был публичным. 2. Большинство API могут обрабатывать public: // напрямую, например, любой или почти любой файл * функции PHP, такие как file_put_contents (). Там нет причин, чтобы преобразовать его самостоятельно. Фактически, некоторые потоковые упаковщики, такие как, например, реализация хранилища amazon S3, даже не позволяют этого.
Бердир

Ответы:

20

В соответствии с API RealPath , вы можете получить его с:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");
Berdir
источник
Вам не хватает части file_default_scheme (), это ничего не делает. Но это все еще существует.
Бердир
Добавил, что в редактировании.
Бердир
когда я делаю это, я получаю директорию files-private. Как мне получить публичный каталог
Диана
@ Диана код выше должен дать вам публичный путь. Чтобы получить приват, вы можете сделать это: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO
@NickO у меня не работает ваш код для пути к частной файловой системе
Адриан Сид
0

Если вы хотите получить только "sites / default / files" или "sites / your-multisite / files", тогда вам следует использовать

// Add to the top of the file.
use Drupal\Core\StreamWrapper\PublicStream;

// In your method.
print PublicStream::basePath();
Луис Эдуардо Телая Эскобедо
источник