Ottieni la directory del percorso pubblico


8

Voglio salvare il file a livello di codice in un percorso pubblico e voglio sapere come posso ottenere Public Directory pathin Drupal 8. In Drupal 7, vorrei utilizzare il seguente codice.

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

Qual è l'equivalente in Drupal 8?


1
Entrambe le funzioni esistono ancora, drupal_realpath () è appena deprecato. Se una funzione è deprecata, puoi quasi sempre guardarne l'implementazione poiché normalmente chiama il nuovo servizio / API. Puoi anche cercare sempre i record delle modifiche: drupal.org/list-changes/…
Berdir

1
Inoltre, due commenti correlati: 1. Stai salvando nel percorso predefinito . Potrebbe essere pubblico, ma potrebbe anche essere qualcos'altro. Puoi semplicemente hardcode public: // se vuoi sempre che sia pubblico. 2. La maggior parte delle API è in grado di gestire public: // direttamente, ad esempio qualsiasi o quasi qualsiasi file * PHP funziona come file_put_contents (). Non c'è motivo di convertirlo da soli. In effetti, alcuni wrapper di stream come ad esempio un'implementazione di archiviazione Amazon S3 non lo permetteranno nemmeno.
Berdir,

Risposte:


20

Secondo l' API realpath , puoi ottenerlo con:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");

Ti manca la parte file_default_scheme (), questo non fa nulla. Ma questo esiste ancora.
Berdir,

Aggiunto in una modifica.
Berdir,

quando lo faccio ottengo la directory files-private. Come posso ottenere l'elenco pubblico
Diana

@Diana il codice sopra dovrebbe darti il ​​percorso pubblico. Per ottenere il privato puoi farlo: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO,

@NickO il tuo codice non funziona per me per il percorso del filesystem privato
Adrian Cid Almaguer

0

Nel caso in cui si desideri ottenere solo "siti / predefiniti / file" o "siti / proprio sito / file", è necessario utilizzare

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

// In your method.
print PublicStream::basePath();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.