由于部署限制,我希望我的Symfony2应用程序在我的文件系统中的/ var / ...下使用的日志和缓存目录。出于这个原因,我正在寻找一种方法来配置Symfony并覆盖这两个目录的默认位置。
我已经看过kernel.cache_dir和kernel.log_dir并读取了类Kernel.php。从我所看到的,我不认为可以通过配置更改目录位置,我将不得不修补Kernel.php类。
这是真的,还是有办法在不修改框架代码的情况下实现我想要的东西?
答案 0 :(得分:18)
将以下方法添加到app / AppKernel.php(AppKernel扩展内核),使它们返回首选路径:
public function getCacheDir()
{
return $this->rootDir . '/my_cache/' . $this->environment;
}
public function getLogDir()
{
return $this->rootDir . '/my_logs';
}
答案 1 :(得分:8)
我很高兴找到你的帖子,但我对这些不合适的答案感到有些困惑。
我遇到了同样的问题,发现日志取决于config参数
kernel.logs_dir
。
所以我只是将它添加到我的config.yml
参数中:
kernel.logs_dir: /var/log/symfonyLogs
如果答案迟到,我希望它对你有所帮助。
答案 2 :(得分:6)
我认为最简单的方法是将文件夹链接到另一个地方。我们已经在prod服务器上做了这个,但是当你在windows上开发本地时,设置符号链接有点复杂。
ln -s /var/cache/ /var/www/project/app/cache
像这样的东西。
答案 3 :(得分:3)
我想提供一个替代方案,即设置环境变量来更改这些目录。这样,根据舞台设置起来更容易。 (测试,生产或开发)
export SYMFONY__KERNEL__CACHE_DIR "/your/directory/cache"
export SYMFONY__KERNEL__LOGS_DIR "/your/directory/logs"
也可以使用SetEnv在虚拟主机中设置环境变量。 在读取内核参数时,symfony将查找以SYMFONY__开头的所有$ _SERVER变量,删除第一部分并将所有双下划线转换为。
见第568至608行
答案 4 :(得分:1)
在symfony中,您可以通过扩展AppKernel中的方法来覆盖缓存(和日志)目录。
// app/appKernel.php class AppKernel extends Kernel { // ... public function getCacheDir() { return $this->rootDir.'/'.$this->environment.'/cache'; } }
查看http://symfony.com/doc/current/cookbook/configuration/override_dir_structure.html#override-cache-dir
答案 5 :(得分:0)
我使用configuration solution from Dragnic但是我将路径放在parameters.yml
文件中,因为git会忽略此文件。换句话说,它没有从我的PC同步到git存储库,所以在prod
环境中没有任何影响。
# app/config/parameters.yml
parameters:
database_driver: pdo_mysql
[...]
kernel.cache_dir: "T:/project/cache"
kernel.logs_dir: "T:/project/logs"
配置:Windows7,WAMP 2.4和Symfony 2.3.20。
但你必须知道:
从配置文件中覆盖
kernel.cache_dir
参数是一个非常糟糕的主意,并且不支持在Symfony中更改缓存文件夹的方法。它会破坏内容,因为您现在可以为内核
Kernel::getCacheDir()
和参数提供不同的缓存文件夹。
来源:https://github.com/symfony/AsseticBundle/issues/370
所以你应该只在dev
环境中使用它,如果你不想改变 app / AppKernel.php 文件的内容,否则请看其他答案
答案 6 :(得分:0)
没有接受的答案,还有一个非常古老的问题,但是我发现它是谷歌的,所以我在这里发布了一个更新的方法来更改缓存目录和日志目录,(source here)
您可以选择要修改的环境,并根据需要管理不同的缓存和日志目录
public function getCacheDir()
{
if (in_array($this->environment, ['prod', 'test'])) {
return '/tmp/cache/' . $this->environment;
}
return parent::getCacheDir();
}
public function getLogDir()
{
if (in_array($this->environment, ['prod', 'test'])) {
return '/var/log/symfony/logs';
}
return parent::getLogDir();
}