【问题标题】:Lumen - Change default Storage path流明 - 更改默认存储路径
【发布时间】:2016-11-17 23:50:28
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: php laravel lumen


    【解决方案1】:

    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) {
          //
      }
      
      ....
      

    【讨论】:

    • 如何设置成/public
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    • 2013-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多