Я пытаюсь выяснить, как изменить место хранения по умолчанию (включая его подпапки) в проекте 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)); }
Итог: есть ли какой-либо чистый способ переопределения пути хранения по умолчанию, учитывая эти ограничения ?:
В строке 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, то, как вы это делаете, зависит только от вас. Тем не менее, я предлагаю сделать это следующим образом:
storage_path
Убедитесь, что этот файл загружен до самого Люмена. Чтобы сделать это, вам нужно разместить заявку на запрос перед автозагрузчиком композитора. Это можно сделать на самой первой строке под 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) { // } ....