Lumen – Изменение пути хранения по умолчанию

Я пытаюсь выяснить, как изменить место хранения по умолчанию (включая его подпапки) в проекте Lumen. По нескольким причинам, учитывая текущую конфигурацию веб-сервера производства, Lumen выбрасывает исключение, исключенное при разрешении, при попытке записи журналов или компиляции представлений Blade.

Единственная альтернатива без использования sysadmin – переместить папку хранения в папку tmp на веб-сервере.

На laravel, кажется, есть метод под названием « useStoragePath », но он, похоже, не доступен в Lumen (5.2.x).

Пути по умолчанию кажутся «жестко закодированными», я нашел это:

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); } 

А для журналов (тот же файл):

 /** * 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)); } 

Итог: есть ли какой-либо чистый способ переопределения пути хранения по умолчанию, учитывая эти ограничения ?:

  • Он не должен включать sysadmin (символические ссылки, изменяющиеся разрешения и т. Д.),
  • Не подделывать папку поставщика.

В строке 286 поставщика / 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); } } 

Ключ здесь:

 if (! function_exists('storage_path')) 

Это означает, что если функция с именем storage_path еще не определена, то Lumen будет использовать свою собственную реализацию.

Все, что вам нужно сделать, это просто написать свою собственную функцию, которая возвращает ваш собственный путь.

Поскольку у Люмена гораздо меньше правил, чем у Laravel, то, как вы это делаете, зависит только от вас. Тем не менее, я предлагаю сделать это следующим образом:

  1. Поместите файл под именем helpers.php в каталог приложения
  2. Добавьте в этот файл все вспомогательные вспомогательные функции, включая вашу собственную реализацию storage_path
  3. Убедитесь, что этот файл загружен до самого Люмена. Чтобы сделать это, вам нужно разместить заявку на запрос перед автозагрузчиком композитора. Это можно сделать на самой первой строке под 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) { // } ....