Twig PHP将现有Array传递给Twig Filter

时间:2013-11-29 12:28:53

标签: php twig

我正在尝试在树枝中实现我的自定义翻译过滤器。所有翻译都存储在csv中。每个模板我们有一个包含数据的csv。

现在由于某种原因,过滤器中的函数无法访问$ TranslationText数组。

我应该更改什么才能使过滤器工作?

注意:未定义的变量:第103行的/public_html/public/index.php中的TranslationText

{{'Whatever'| t}}

请求翻译
if (file_exists("../application/languages/nl/".$RenderTemplate.".csv") != FALSE) {
    $handle  = file_get_contents("../application/languages/nl/".$RenderTemplate.".csv");
    $handle_row = explode("\n", $handle);
    foreach ($handle_row as $key => $val) {
        $row_array = explode('|', $val);
        foreach ($row_array as $key => $val) {
            $row_array[$key] = trim(str_replace('"', '', $val));
        }
        $TranslationText[] = $row_array;
    }
}


require_once '../library/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('../application/views/');
//Add Translation Filter
$filter = new Twig_SimpleFilter('t', function ($string) {

    foreach($TranslationText AS $key => $value)//line 103
    {
        if($TranslationText[$key][0] == $string)
        {
            $Found = TRUE;
            $TranslatedText = $TranslationText[$key][1];
        }
    }

    if($Found == TRUE)
    {
        return $TranslatedText;
    }
    else
    {
        return $string;
    }

});


$twig = new Twig_Environment($loader, array(
    'cache' => '../tmp/cache/', 'auto_reload' => TRUE, 'debug' => TRUE
));
//REMOVE auto_reload and DEBUG if live!
$twig->addFilter($filter);
echo $twig->render($RenderTemplate.".html", $TotalArray);

1 个答案:

答案 0 :(得分:0)

我只能说因为以下原因而得到错误:

$filter = new Twig_SimpleFilter('t', function ($string) {
    foreach($TranslationText AS $key => $value)//line 103
    //... other code lines follow
});

您没有use $translationText。请考虑以下代码:

$filter = new Twig_SimpleFilter('t', function ($string) use ($TranslationText) {
    foreach($TranslationText AS $key => $value)//line 103
    //... other code lines follow
});

请注意,如果您的csv文件不存在或无法读取,您仍会收到相同的错误,因为您未在file_exists条件之外声明此变量。

注意:我无法保证这是您代码中唯一的问题。它只是解决您特定问题的方法。

P.S。通常,您的代码看起来很混乱。考虑使用OOP来做这些事情。另外,请注意您使用的标准:一些变量使用下划线命名,其他变量使用CamelCase命名。