有没有办法覆盖 Compiler::template() 中定义的 php 锂缓存路径

Is there a way to override the php lithium cache path defined in Compiler::template()

我想知道是否可以在运行时覆盖此方法中定义的 cachePath:

http://li3.me/docs/lithium/template/view/Compiler::template()

我正在尝试将 lithium 用作多租户应用程序,并且我正在尝试分离租户之间的所有内容,包括已编译的模板。

有很多方法可以做到这一点,具体取决于您的实施方式。 一种方法是在 bootstrap 期间使用 Media::type 函数设置 html(或其他内容类型)处理程序的 compiler.path 参数。

例如:

Media::type('html', null, array(
  'cast' => false,
  'view' => 'lithium\template\View',
  'paths' => array(
    'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
    'layout'   => '{:library}/views/layouts/{:layout}.{:type}.php',
    'element'  => '{:library}/views/elements/{:template}.{:type}.php'
  ),
  'compiler' => array(
    'path' => '/path/to/your/cache/folder'
  )
));

但是根据您的要求来看,您最好扩展 \lithium\template\view\Compiler class 并覆盖模板函数。

您可以通过使用相同的 Media::type 函数

设置编译器的 class 名称来实现
Media::type('html', null, array(
  'cast' => false,
  'view' => 'lithium\template\View',
  'paths' => array(
    'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
    'layout'   => '{:library}/views/layouts/{:layout}.{:type}.php',
    'element'  => '{:library}/views/elements/{:template}.{:type}.php'
  ),
  'classes' => array(
    'compiler' => '\namespace\class\name'
  )
));