2015-08-05 35 views
6

Chcę zmienić ścieżkę przechowywania, którą Laravel 5.1 używa do czegoś podobnego do /home/test/storage. Ma to tę zaletę, że pliki te nie są przechowywane w repozytorium, co wydaje mi się dość brzydkie. W Laravel 4 było to bardzo proste z bootstrap/paths.php.Zmień ścieżkę przechowywania w Laravel 5

W Laravel 5 to działa przy użyciu $app->useStoragePath('/path/') w bootstrap/app.php. Jednak chcę zdefiniować ścieżkę przechowywania za pomocą opcji konfiguracyjnej, takiej jak $app->useStoragePath(config('app.storage_path'). Opcja konfiguracyjna wywołuje zmienną środowiskową lub zwraca domyślną lokalizację.

Powoduje to uzyskanie wyniku Uncaught exception 'ReflectionException' with message 'Class config does not exist'; ma to sens, ponieważ ta funkcja nie jest jeszcze załadowana.

Próbowałem ustawienie ścieżki pamięci zaraz po uruchomieniu:

$app->booted(function() use ($app) { 
    $app->useStoragePath(config('app.storage_root')); 
}); 

To nic nie zmienił. Próbowałem też bezpośrednio wiążący go path.storage:

$app->bind('path.storage', function ($app) { 
    return config('app.storage_root'); 
}); 

Ostatnia opcja działa częściowo; pamięć podręczna widoku jest teraz umieszczona we właściwej lokalizacji, ale dzienniki nadal znajdują się w starej lokalizacji.

Odpowiedz

2

Użyj dowiązania symbolicznego.

# Move current storage folder to where you want it to be 
mv storage ../storage 
# Create a symlink to this new location 
ln -s ../storage ./storage 
+1

Korzystnie nie, bo to zmusza cię do posiadania określonej lokalizacji. Możesz ditignore dowiązanie symboliczne i dodać go dla każdej instalacji, ale jest to dość hacky. – spacek33z

1

Działa to na laravel 5,2

Plik: app/Providers/AppServiceProvider.php

public function register() { 
    ... 
    $this->app->useStoragePath(config('what_ever_you_want')); 
    ... 
} 
4

Oto proste rozwiązanie zmieniając ścieżkę przechowywania w laravel 5 jak robimy w laravel 4

na bootstrap/app.php

# new storage path 
# base_path() -> returns root path 
$path_storage = base_path() . "../../storage"; 

# override already $app->storagePath using the function 
$app->useStoragePath($path_storage); 

uczyni ścieżka przechowywanie być sama z sesji, poglądów, cache, dzienniki

2

laravel 5.3 jest w bootstrap/app.php

/* 
|-------------------------------------------------------------------------- 
| Set Storage Path 
|-------------------------------------------------------------------------- 
| 
| This script allows us to override the default storage location used by 
| the application. You may set the APP_STORAGE environment variable 
| in your .env file, if not set the default location will be used 
| 
*/ 

$app->useStoragePath(env('APP_STORAGE', base_path() . '/storage'));