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?


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() . "://");

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();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.