Obtener el directorio de ruta pública

8

Quiero guardar el archivo mediante programación en una ruta pública, y quiero saber cómo puedo acceder Public Directory patha Drupal 8. En Drupal 7, usaría el siguiente código.

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

¿Cuál es el equivalente en Drupal 8?

Yusef
fuente
1
Ambas funciones todavía existen, drupal_realpath () está en desuso. Si una función está en desuso, casi siempre puede ver su implementación, ya que generalmente llama al nuevo servicio / API. También puede buscar siempre los registros de cambios: drupal.org/list-changes/…
Berdir
1
Además, dos comentarios relacionados: 1. Estás guardando en la ruta predeterminada . Eso podría ser público pero también podría ser otra cosa. Simplemente puede codificar public: // si siempre quiere que sea en público. 2. La mayoría de las API pueden manejar public: // directamente, por ejemplo, cualquiera o casi cualquier archivo * Funciones PHP como file_put_contents (). No hay razón para convertirlo usted mismo. De hecho, algunos envoltorios de flujo como, por ejemplo, una implementación de almacenamiento amazon S3 ni siquiera lo permitirán.
Berdir

Respuestas:

20

De acuerdo con la API de RealPath , puede obtenerlo con:

\Drupal::service('file_system')->realpath(file_default_scheme() . "://");
Berdir
fuente
Te falta la parte file_default_scheme (), esto no hace nada. Pero eso todavía existe.
Berdir
Agregó eso en una edición.
Berdir
cuando hago esto obtengo el directorio privado de archivos. ¿Cómo obtengo el directorio público
Diana
@Diana, el código anterior debería darte la vía pública. Para obtener lo privado, puede hacer esto: \ Drupal :: service ('file_system') -> realpath ("private: //");
NickO
@NickO tu código no funciona para mí para la ruta del sistema de archivos privado
Adrian Cid Almaguer
0

En caso de que desee obtener solo "sitios / archivos / predeterminados" o "sitios / su-multisitio / archivos", entonces debe usar

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

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