gpt4 book ai didi

php - 如何在 Slim 中向我的 Twig 模板添加自定义过滤器?

转载 作者:可可西里 更新时间:2023-11-01 13:40:00 25 4
gpt4 key购买 nike

使用 http://twig.sensiolabs.org/doc/advanced.html#creating-an-extension 中的示例: 在创建 View 的主要 Slim 文件中:

$filter = new Twig_SimpleFilter( 'stripslashes', function ( $string ) { 
return stripslashes( $string );
});

$loader = new \Twig_Loader_String();
$twig = new Twig_Environment($loader);
$twig->addFilter($filter);

$app->view($twig);

$app->view()->setData( array(
'nav' => $nav,
'sidenav' => $sidenav,
));

结果:调用未定义的方法 Twig_Environment::appendData()

尝试了多种方式,例如:

$app->view(new \Slim\Views\Twig());
$app->view->parserExtensions = array(
new \Slim\Views\TwigExtension(),
);

$app->view->addFilter($filter);

但我只是不明白它应该如何工作。

最佳答案

对于 Slim 3,情况发生了变化。它可以在一行中完成:

$view->getEnvironment()->addFilter($filter);

但如果没有上下文,这就不是特别有用,所以这里有一个完整的示例,基于 Slim 框架网站上提供的示例:http://www.slimframework.com/docs/features/templates.html

此代码演示了添加过滤器以使用 rot13 对文本进行编码

<?php
// Create app
$app = new \Slim\App();

// Get container
$container = $app->getContainer();

// Register component on container
$container['view'] = function ($container) {
$view = new \Slim\Views\Twig('path/to/templates', [
'cache' => 'path/to/cache'
]);
$view->addExtension(new \Slim\Views\TwigExtension(
$container['router'],
$container['request']->getUri()
));

$filter = new Twig_SimpleFilter('rot13', function ($string) {
return str_rot13($string);
});

$view->getEnvironment()->addFilter($filter);

return $view;
};

// Render Twig template in route
$app->get('/rot13/{text}', function ($request, $response, $args) {
return $this->view->render($response, 'rot13.html', [
'name' => $args['text']
]);
})->setName('rot13');

// Run app
$app->run();

并且 html 文件 rot13.html 包含:

{{text|rot13}}

将您的浏览器指向您的服务器名/rot13/pineapple,您应该会看到

cvarnccyr

关于php - 如何在 Slim 中向我的 Twig 模板添加自定义过滤器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27714854/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com