2016-07-14 184 views
1

我试图找出如何更改Lumen项目上的默认存储位置(包括它的子文件夹)。由于多种原因,考虑到生产Web服务器的当前配置,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)); 
    } 

底线:有没有干净的方式覆盖默认存储路径牢记这个限制?:

  • 我的t不应该涉及sysadmin(sym链接,更改权限等)
  • 不篡改供应商文件夹。

回答

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功能,然后流明将使用它自己的实现。

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

因为流明比Laravel少得多,所以你怎么做完全取决于你。这就是说,我会建议做如下方式:

  1. 将一个你的应用程序目录
  2. 下称为helpers.php文件添加任何及所有自定义辅助功能到这个文件包括你自己storage_path实现
  3. 确保此文件在Lumen本身之前加载。为此,您需要在composer的自动加载器之前放置您的require语句。

    require_once __DIR__ . '/../app/helpers.php'; 
    require_once __DIR__ . '/../vendor/autoload.php'; 
    
    try { 
        (new Dotenv\Dotenv(__DIR__ . '/../'))->load(); 
    } catch (Dotenv\Exception\InvalidPathException $e) { 
        // 
    } 
    
    .... 
    
:这可以在第一行下 引导/ app.php完成