如何配置Kohana + Twig模块,以便Twig将"所有" 权限写入所有" 的权限。 s后代文件?
因此,例如,当我通过Apache模块(mod_php
)运行我的应用程序并且缓存文件所有者是apache
(或httpd
)用户时,我会能够使用常规用户和ssh
访问权限删除缓存文件(清理缓存或完全删除整个应用程序)。
我能够使用Kohana的缓存,但Twig的缓存以不同的方式创建。
答案 0 :(得分:0)
它不是很容易,但也不是太复杂。我通过反复试法获得了下面的状态。
创建一个继承自Twig_Cache_Filesystem
的类,并使用代替。看看这个:
<?php
namespace Application\Twig;
class Cache_Filesystem extends \Twig_Cache_Filesystem
{
public function write($key, $content)
{
$old = umask(0000);
parent::write($key, $content);
umask($old);
}
}
请注意,此类必须具有唯一的名称,因此最好对其进行命名。此外,它必须可供其他代码访问,因此请考虑使用composer
的自动加载功能。
这是修复本身,本指南的其余部分只是将其实施到Kohana + Twig生态系统中的方式。
将Twig.php
从modules/kohana-twig/classes/Twig.php
复制到您的应用程序目录中,即application/classes/Twig.php
(谢谢Kohana's Cascading Filesystem!)
修改一个新复制的文件,让Twig_CacheInterface
实例在配置文件(application/config/twig.php
)中传递,而不仅仅是一个简单的字符串(指定Twig的缓存)目录)。看看我的例子:
<?php defined('SYSPATH') or die('No direct script access.');
class Twig extends Kohana_Twig
{
/**
* Initialize the Twig module
*
* @throws Kohana_Exception
* @return bool
*/
public static function init()
{
$path = Kohana::$config->load('twig.environment.cache');
if (is_string($path)) {
return parent::init();
} else if ($path instanceof Twig_CacheInterface) {
return true;
}
throw new Kohana_Exception('Twig cache could not be initialized');
}
}
在kohana-twig
模块的配置文件中,即application/config/twig.php
(如果尚未从模块复制到您的应用程序,请立即执行),定义environment.cache
键,如下所示:< / p>
return array(
'loader' => array(
'extension' => 'twig',
'path' => 'views',
),
'environment' => array(
'auto_reload' => (Kohana::$environment >= Kohana::TESTING),
'autoescape' => true,
'base_template_class' => 'Twig_Template',
// Following line is related to this issue and fix:
'cache' => new \Application\Twig\Cache_Filesystem(APPPATH . 'cache/twig'),
'charset' => 'utf-8',
'optimizations' => - 1,
'strict_variables' => false,
),
'functions' => array(),
'filters' => array(),
'tests' => array(),
}
这对我有用。希望它能帮助那些在类似问题上挣扎的人。