Dapatkan direktori jalur publik

8

Saya ingin menyimpan file secara terprogram di jalur publik, dan saya ingin tahu bagaimana saya bisa mendapatkan Public Directory pathdi Drupal 8. Di Drupal 7, saya akan menggunakan kode berikut.

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

Apa yang setara di Drupal 8?

Yusef
sumber
1
Kedua fungsi sebenarnya masih ada, drupal_realpath () baru saja ditinggalkan. Jika suatu fungsi tidak digunakan lagi, Anda hampir selalu dapat melihat implementasinya karena biasanya memanggil layanan / API baru. Anda juga dapat selalu mencari catatan perubahan: drupal.org/list-changes/…
Berdir
1
Juga, dua komentar terkait: 1. Anda menyimpan di jalur default . Itu mungkin bersifat publik tetapi mungkin juga sesuatu yang lain. Anda dapat membuat hardcode publik: // jika Anda selalu menginginkannya di publik. 2. Sebagian besar API dapat menangani publik: // secara langsung, mis. Setiap atau hampir semua file * Fungsi PHP seperti file_put_contents (). Tidak ada alasan untuk mengubahnya sendiri. Bahkan, beberapa pembungkus aliran seperti misalnya implementasi penyimpanan amazon S3 bahkan tidak akan membiarkan itu.
Berdir

Jawaban:

20

Menurut API realpath , Anda bisa mendapatkannya dengan:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");
Berdir
sumber
Anda melewatkan bagian file_default_scheme (), ini tidak melakukan apa-apa. Tapi itu masih ada.
Berdir
Menambahkan itu dalam edit.
Berdir
ketika saya melakukan ini saya mendapatkan direktori file-private. Bagaimana cara mendapatkan direktori publik
Diana
@Diana kode di atas akan memberi Anda jalur publik. Untuk mendapatkan privasi Anda dapat melakukan ini: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO
@NickO kode Anda tidak berfungsi untuk saya untuk jalur sistem file pribadi
Adrian Cid Almaguer
0

Jika Anda ingin mendapatkan hanya "sites / default / files" atau "sites / your-multisite / files" Maka Anda harus menggunakan

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

// In your method.
print PublicStream::basePath();
Luis Eduardo Telaya Escobedo
sumber