2 votes

Lumen - Modifier le chemin de stockage par défaut

J'essaie de trouver comment modifier l'emplacement de stockage par défaut (y compris ses sous-dossiers) sur un projet Lumen. Pour plusieurs raisons, étant donné la configuration actuelle du serveur web de production, Lumen lance une exception de permission refusée lorsqu'il essaie d'écrire des journaux. o compiler les vues de la lame.

La seule alternative, sans impliquer l'administrateur système, est de déplacer le dossier de stockage vers un dossier tmp sur le serveur web.

Sur Laravel, il semble y avoir une méthode appelée " useStoragePath ", mais il ne semble pas être disponible sur Lumen (5.2.x).

Les chemins par défaut semblent être "codés en dur", j'ai trouvé ceci :

Project\vendor\laravel\lumen-framework\src\Application.php

/**
     * Get the storage path for the application.
     *
     * @param  string|null  $path
     * @return string
     */
    public function storagePath($path = null)
    {
        return $this->basePath().'/storage'.($path ? '/'.$path : $path);
    }

Et pour les logs (même fichier) :

/**
     * Get the Monolog handler for the application.
     *
     * @return \Monolog\Handler\AbstractHandler
     */
    protected function getMonologHandler()
    {
        return (new StreamHandler(storage_path('logs/lumen.log'), Logger::DEBUG))
                            ->setFormatter(new LineFormatter(null, null, true, true));
    }

Conclusion : Existe-t-il un moyen propre de remplacer le chemin de stockage par défaut en tenant compte de ces restrictions ?

  • Elle ne doit pas impliquer l'administrateur système (liens sym, modification des permissions, etc.).
  • Ne pas altérer le dossier du vendeur.

2voto

maiorano84 Points 5242

À la ligne 286 de vendor/laravel/lumen-framework/src/helpers.php :

if (! function_exists('storage_path')) {
    /**
     * Get the path to the storage folder.
     *
     * @param  string  $path
     * @return string
     */
    function storage_path($path = '')
    {
        return app()->storagePath($path);
    }
}

La clé ici est cette ligne :

if (! function_exists('storage_path'))

Cela signifie que si une fonction nommée storage_path n'a pas déjà été définie, alors Lumen utilisera sa propre implémentation.

Il vous suffit d'écrire votre propre fonction qui renvoie votre propre chemin personnalisé.

Étant donné que Lumen a beaucoup moins de règles que Laravel, la façon de procéder est entièrement à votre discrétion. Cela dit, je vous suggère de procéder de la manière suivante :

  1. Placez un fichier appelé aides.php sous votre répertoire d'applications
  2. Ajoutez toutes les fonctions d'aide personnalisées dans ce fichier, y compris les vôtres. storage_path mise en œuvre
  3. Assurez-vous que ce fichier est chargé avant Lumen lui-même. Pour ce faire, vous devez placer votre instruction require avant l'autoloader du compositeur. Cela peut être fait à la toute première ligne sous le nom de bootstrap/app.php :

    require_once __DIR__ . '/../app/helpers.php';
    require_once __DIR__ . '/../vendor/autoload.php';
    
    try {
        (new Dotenv\Dotenv(__DIR__ . '/../'))->load();
    } catch (Dotenv\Exception\InvalidPathException $e) {
        //
    }
    
    ....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X