流明 - 更改默认存储路径

时间:2016-07-14 21:44:18

标签: php laravel lumen

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

唯一不涉及sysadmin的替代方案是将存储文件夹移动到Web服务器上的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));
    }

底线:是否有任何干净的方法来覆盖默认存储路径,并牢记这些限制?:

  • 它不应该涉及系统管理员(sym链接,更改权限等)
  • 不要篡改供应商文件夹。

1 个答案:

答案 0 :(得分:4)

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