gpt4 book ai didi

php - Lumen - 更改默认存储路径

转载 作者:行者123 更新时间:2023-12-03 18:46:16 30 4
gpt4 key购买 nike

我正在尝试了解如何更改 Lumen 项目的默认存储位置(包括其子文件夹)。出于多种原因,考虑到生产 Web 服务器的当前配置,Lumen 在尝试写入日志编译 Blade View 时抛出权限被拒绝的异常。

在不涉及系统管理员的情况下,唯一的替代方法是将存储文件夹移动到网络服务器上的 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));
}

底线:是否有任何干净的方法可以在牢记这些限制的情况下覆盖默认存储路径?

  • 不应涉及系统管理员(符号链接(symbolic link)、更改权限等)
  • 不篡改供应商文件夹。

最佳答案

On Line 286 of 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);
}
}

这里的关键是这一行:

if (! function_exists('storage_path'))

这意味着如果尚未定义名为 storage_path 的函数,则 Lumen 将使用其自己的实现。

您只需编写自己的函数来返回您自己的自定义路径。

因为 Lumen 的规则比 Laravel 少得多,所以你如何做到这一点完全取决于你。也就是说,我建议按照以下方式进行:

  1. 在您的应用程序目录下放置一个名为helpers.php 的文件
  2. 将所有自定义辅助函数添加到此文件中,包括您自己的storage_path 实现
  3. 确保此文件在 Lumen 本身之前加载。为此,您需要将 require 语句放在 Composer 的自动加载器之前。这可以在 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) {
    //
    }

    ....

关于php - Lumen - 更改默认存储路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38384749/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com