symfony 结合 smarty 及相关的问题

本文详细介绍如何在Symfony项目中集成Smarty模板引擎,包括安装步骤、配置方法及常见问题解决技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

url:
http://trac.symfony-project.com/wiki/sfSmartyViewPlugin
http://www.symfony-project.org/forum/index.php/mv/msg/122/22565/
url:
让你的symfony 支持smarty
在你的symfony 项目 askeet目录下面(d:/apps/www/symfony/askeet)
执行
记得要在./symfony文件中加入:
    set_include_path(dirname(__FILE__).PATH_SEPARATOR.get_include_path());

cmd
>php symfony plugin-install http://plugins.symfony-project.com/sfSmartyViewPlugin

安装完后sfSmartyViewPlugin在 d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin目录中

在d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/doc中有一个PDF是专门介绍该插件的安装
经试用总结如下:

1.在d:/apps/www/symfony/askeet/frontend/config中创建 module.yml文件
内容如下
all:
 view_class: sfSmarty

2.拷贝d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/templates/layout.tpl
至 d:/apps/www/symfony/askeet/frontend/templates 中

拷贝d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/templates/indexSuccess.tpl
至 d:/apps/www/symfony/askeet/frontend/module/default/templates 中

3.将下面的内容添加到d:/apps/www/symfony/askeet/frontend/config/app.yml中
default values
all:
 sfSmartyView:
   class_path: d:
/apps/www/symfony/askeet/lib/Smarty/libs
   cache_dir: d:
/apps/www/symfony/askeet/web/tmp
   template_extension: .tpl
   template_security: 
false


按上面的三步即可完成一个简单版本的symfony+smarty 的演示

中间可能会出现一些错误,请参考doc目录下面的pdf文档

下面是出现的部分错误:在调试状态下会出现
”Unable to load "SmartyUrlHelper.php" helper “
相关的提示
针对此问题我们可以对d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/lib/sfSmartyView.class.php
做如下的修改
--- sfSmartyViewPlugin-0.1.2libsfSmartyView.class.php.orig    Thu Jan 25 11:31:27 2007
+++ sfSmartyViewPlugin-0.1.2libsfSmartyView.class.php    Thu Jan 25 12:09:51 2007
@@ 
-172,7 +172,12 @@
         }
         include (self::$cache
->getFile($helperName, self::CACHENAMESPACE));
         
try {
-            sfLoader::loadHelpers(array($helperName, 'Smarty' . $helperName));
+            if (self::isExistSmartyHelper($helperName)) {
+                sfLoader::loadHelpers(array($helperName, 'Smarty' . $helperName));
+            }

+            else {
+                sfLoader::loadHelpers(array($helperName));
+            }

         }

         
catch (sfViewException $e) {
             
if (!strpos($e->getMessage(), 'Smarty' . $helperName)) {
@@ 
-182,6 +187,21 @@
         self::$loadedHelpers[$helperName] 
= true;
     }

 
+    /*
+     * @param string $helperName
+     * @return boolean
+     
*/

+    private function isExistSmartyHelper($helperName) {
+        if ($pluginHelperDirs = glob(sfConfig::get('sf_plugins_dir').'/*/lib/helper') ) {
+            foreach ($pluginHelperDirs as $pluginHelperDir) {
+                if (is_readable($pluginHelperDir . '/Smarty' . $helperName . 'Helper.php')) {
+                    return true;
+                }

+            }

+        }

+        return false;
+    }
    
+    
     
/**
      * sfSmartyView::parseFile()
      *

即d:/apps/www/symfony/askeet/plugins/sfSmartyViewPlugin/lib/sfSmartyView.class.php文件中的部分代码为
start line: 175 
       include (self::$cache
->getFile($helperName, self::CACHENAMESPACE));
        
try {
            
if (self::isExistSmartyHelper($helperName)) {
                sfLoader::loadHelpers(array($helperName, 
'Smarty' . $helperName));
            }

            
else {
                sfLoader::loadHelpers(array($helperName));
            }

        }

        
catch (sfViewException $e) {
            
if (!strpos($e->getMessage(), 'Smarty' . $helperName)) {
                
throw $e;
            }

        }

        self::$loadedHelpers[$helperName] 
= true;
    }
    
    
/*
     * @param string $helperName
     * @return boolean
     
*/

    
private function isExistSmartyHelper($helperName) 
    
{
        
if ($pluginHelperDirs = glob(sfConfig::get('sf_plugins_dir').'/*/lib/helper') ) {
            
foreach ($pluginHelperDirs as $pluginHelperDir) {
                
if (is_readable($pluginHelperDir . '/Smarty' . $helperName . 'Helper.php')) {
                    
return true;
                }

            }

        }

        
return false;
    }
 

照上面的方法做过修改后 相关的警告会在 log/frontend_dev.log中记录


提示:上面的有些地方要根据你的主机来确定,不可照搬
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值