crunch / ssi-bundle
为 Symfony2 应用程序设计的服务器端包含 (SSI) 段渲染器
Requires
- php: >=5.5.9
- symfony/config: ~2.3|~3.0
- symfony/dependency-injection: ~2.3|~3.0
- symfony/http-foundation: ~2.3|~3.0
- symfony/http-kernel: ~2.3|~3.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
README
注意:从 Symfony 2.6.0-beta1 开始,SSI 支持已集成到 Symfony 本身,因此此包是“部分弃用”,主要用于支持 <2.6。也就是说,当与 >=2.6 的版本不兼容时,我建议使用内置功能而不是此包。
为与 nginx 一起使用的 Symfony2 应用程序设计的 SSI 支持,但也适用于其他服务器。它包括一个内核代理类,用于在开发过程中替换 SSI 标签,或作为后备方案。
安装
如常
- 将相应的包添加到您的
composer.json
文件中。请参阅上面的链接获取可用包列表,或直接使用"crunch\ssi-bundle":"dev-master"
在您的
AppKernel
类中注册Crunch\Bundle\SSIBundle\CrunchSSIBundle
new Crunch\Bundle\SSIBundle\CrunchSSIBundle
用法
在 twig 中
{{ render('/path/to/interal', {strategy: 'ssi'}) }}
内核代理
通常,在开发过程中将 inline
设置为 true
就足够了(见下文)。但是,您可以使用一个内核代理,它将充当 SSI 服务器。在您的 app_dev.php
中
$kernel = new AppKernel($env, $debug);
// prepare kernel
$kernel = new \Crunch\Bundle\SSIBundle\KernelProxy\SSIProxy($kernel);
$kernel->run();
$kernel->terminate();
配置
crunch_ssi:
inline: false
use_header: false
选项 | 描述 |
---|---|
inline | 是否始终使用内联片段渲染器。 |
use_header | 是否尊重请求并创建响应头。 |
技术上,inline
禁用了 SSI 标签的渲染。如果您不再想使用 SSI,但模板中存在多个 SSI 片段渲染器的调用,这将非常有用,否则会导致“未知渲染器 'ssi'”。它也适用于开发。
如果将 use_header
设置为 true
,则当没有设置 Surrogate-Capability
请求头时,将回退到内联片段渲染器。此外,它还将添加一个 Surrogate-Control
响应头。
注意,默认的内联片段渲染器不处理任何缓存头。因此,如果您想在其他模板中渲染短暂的片段,即使它们在理论上已过时,它们也可能被包含在页面中,因为整个页面仅受主请求的缓存头的影响。
关于 Nginx 的说明
通常,在您的 nginx.conf
(或包含文件)中设置 ssi on
应该没有问题。但是,存在问题:请求 URI。
- 当设置为
$request_uri
时,它将始终使用初始请求来请求后端(php-fpm
)。这会导致无限递归,最坏的情况是简单地杀死您的浏览器。 - 当设置为
$uri
时,它将使用完全重写的 URI,这可以工作,但脚本文件名(通常是/app.php
)已经添加。
因此,最终它对我工作得很好
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param REQUEST_URI $fastcgi_path_info;
如你所见,我将请求 URI 设置为 PATH_INFO
。这可以工作,因为 Symfony2 并不真正关心 真实 的请求 URI。至少到目前为止,我没有注意到任何副作用。
要求
- PHP >= 5.3
贡献者
有关如何贡献的详细信息,请参阅 CONTRIBUTING.md。
- Sebastian "KingCrunch" Krebs krebs.seb@gmail.com -- http://www.kingcrunch.de/(德语)
许可证
本库采用MIT许可证授权。有关详细信息,请参阅LICENSE文件。