Twig是一款适用于PHP的现代,快速,灵活且安全的模板引擎。为Symfony创建并由Drupal 8采用。
如何调试symfony 6中的“如果Twig包不可用,则无法使用“renderView”方法”错误?
我最近刚刚将我的项目从 symfony 4 升级到 6,没有太多问题。目前网上版本使用的是symfony6没有问题。 我现在正在尝试清理代码,删除一些无用的
ok,我设法将测试页的代码与 JMSTranslationBundle 结合起来在 twig 中切换语言,如下所示 好的,我设法将测试页的代码与 JMSTranslationBundle 结合起来在 twig 中切换语言 <li> <a href="{{ path("main", {"_locale": "en","name": name}) }}"> <img src="{{ asset('img/flags/gb.png') }}"></a></li> <li> <a href="{{ path("main", {"_locale": "de","name": name}) }}"> <img src="{{ asset('img/flags/de.png') }}"></a></li> 但这对path ("main")有用 我怎样才能让它动态地适用于我当前正在处理的页面/路线,包括所需的参数(在这种情况下"name": name?所以如果我当前在“关于我们”的英文页面上,我可以自动切换到德语页面关于我们,包括它的参数吗?或者我必须使用路径对每个树枝页面/模板进行硬编码吗? 这描述了一个与您正在寻找的扩展完全一样的扩展:http://blog.viison.com/post/15619033835/symfony2-twig-extension-switch-locale-current-route 可以通过注入 ScopeWideningInjectionException 来检索路由器和请求来修复 @service_container,而不是直接注入它们。 硬编码是一个坏主意,这是可以实现的,但据我所知还不是开箱即用的。为了提供具有相同路径和参数但针对不同语言环境的 url,我所做的就是创建一个自定义树枝扩展来执行此操作。 此扩展提供了一个新的 twig 函数,它将读取当前路由、当前参数、消除私有参数并为另一个语言环境生成相同的路由。这是有问题的树枝扩展: <?php namespace Acme\WebsiteBundle\Twig\Extension; use Symfony\Component\DependencyInjection\ContainerInterface; class LocalizeRouteExtension extends \Twig_Extension { protected $request; protected $router; public function __construct(ContainerInterface $container) { $this->request = $container->get('request'); $this->router = $container->get('router'); } public function getFunctions() { return array( 'localize_route' => new \Twig_Function_Method($this, 'executeLocalizeRoute', array()), ); } public function getName() { return 'localize_route_extension'; } /** * Execute the localize_route twig function. The function will return * a localized route of the current uri retrieved from the request object. * * The function will replace the current locale in the route with the * locale provided by the user via the twig function. * * Current uri: http://www.example.com/ru/current/path?with=query * * In Twig: {{ localize_route('en') }} => http://www.example.com/en/current/path?with=query * {{ localize_route('fr') }} => http://www.example.com/fr/current/path?with=query * * @param mixed $parameters The parameters of the function * @param string $name The name of the templating to render if needed * * @return Output a string representation of the current localized route */ public function executeLocalizeRoute($parameters = array(), $name = null) { $attributes = $this->request->attributes->all(); $query = $this->request->query->all(); $route = $attributes['_route']; # This will add query parameters to attributes and filter out attributes starting with _ $attributes = array_merge($query, $this->filterPrivateKeys($attributes)); $attributes['_locale'] = $parameters !== null ? $parameters : \Locale::getDefault(); return $this->router->generate($route, $attributes); } /** * This function will filter private keys from the attributes array. A * private key is a key starting with an underscore (_). The filtered array is * then returned. * * @param array $attributes The original attributes to filter out * @return array The filtered array, the array withtout private keys */ private function filterPrivateKeys($attributes) { $filteredAttributes = array(); foreach ($attributes as $key => $value) { if (!empty($key) && $key[0] != '_') { $filteredAttributes[$key] = $value; } } return $filteredAttributes; } } 现在,您可以通过捆绑包加载此服务定义或直接加载到位于 config.yml 下的 app/config 文件中来启用此树枝扩展。 services: acme.twig.extension: class: Acme\WebsiteBundle\Twig\Extension\LocalizeRouteExtension scope: request arguments: request: "@request" router: "@router" tags: - { name: twig.extension } 现在您可以在 twig 中执行此操作以提出当前加载页面的不同版本: <a id='englishLinkId' href="{{ localize_route('en') }}"> English </a> <a id='frenchLinkId' href="{{ localize_route('fr') }}"> Français </a> 希望这对您有所帮助,这就是您正在寻找的。 编辑: 看来直接缩小twig扩展的范围是不可能的。为了避免这种情况,请始终注入依赖项容器,然后检索所需的服务。这应该通过更改 twig 扩展的构造函数定义和扩展的服务定义来反映。我编辑了之前的答案,检查新更新的构造函数定义和新服务定义。 另一种可能的解决方案是注入一个帮助服务来负责本地化路线。该辅助服务应该在请求范围内。事实上,这就是我的代码中的内容。我有一个 RoutingHelper 服务注入到我的树枝扩展中。然后,在方法executeLocalizeRoute中,我使用我的助手来完成这项艰苦的工作。 告诉我现在一切是否正常。 问候, 马特
我正在尝试更改应用程序中注册表单的模板,以便我可以向其中添加一些其他 HTML。 这是 /My/UserBundle/Resources/views/Registration/register.html.twig ...
我尝试在树枝内渲染控制器。我遵循文档“嵌入其他控制器”。 我经常收到 render(controller()) 方法的异常: 抛出异常
我有一个表单集合 POI,我想向其中添加一个媒体集合,但是我无法让 JS 动态添加/删除嵌套媒体集合。 poi 表单类型 - th...
我尝试学习 Symfony 速成课程,但我被 ATM 困住了。结构相对简单,我有 3 个实体,其设置如下: 定价计划好处 姓名 细绳 ...
在 PHP 中,我想提取树枝块中包含的文本,并认为正则表达式是最有效的。 假设我有一个包含以下内容的文件“index.twig”: {% 块内容 %}
如果不存在移动版本,我需要一种简单的方法来回退到默认模板。 通过一些正则表达式,我识别移动平台并希望使用以下模式渲染模板...
我正在尝试创建一个可以处理 2 个参数的特定树枝过滤器。 $documentURL = new Twig_SimpleFilter('documentURL', function($DocumentId, $UserId){ $URL =“http://example.example.com/
我有一个树枝模板,我想测试一个项目是否以某个值开头 {% if item.ContentTypeId == '0x0120' %} {{ item.BaseN...
我正在使用 Twig,我希望能够缩小 HTML 输出。我该怎么做呢?我尝试了 {% spaceless %},但这需要将其添加到我的所有模板中。我可以在 Twig 中添加缩小功能吗
根据 Symfony 文档,可以自定义单独的集合表单类型。如何让 Symfony 检测我的自定义树枝模板? 它似乎不能开箱即用,但我可能......
所以,我的假设是错误的,花了我时间重新搜索问题,所以我完全编辑了我的问题: 我的问题是,在我的页面中,某些条目没有显示。但出口所有...
是否可以在twig中解码JSON?谷歌搜索似乎没有产生任何关于此的结果。在 Twig 中解码 JSON 没有意义吗? 我正在尝试访问 Symfony2 实体上的 2 个实体属性
好吧,我不确定我是否错过了这里的技巧。但我在文档或网上找不到任何解决方案。 基本上我试图在模板块中包含一大块 JavaScript,但是......
布局.twig {% 块内容 %}{% 结束块内容 %} {% 块页脚 %}{% 结束块 %} 页面.twig {% 扩展 'layout.twig' %} {% 块内容 %} {#ab...
未捕获的 Twig\Error\SyntaxError:意外的标记“字符串”,值为“/”
我有一个PHP代码,并尝试使用许多转换器将其转换为Opencart的twig模板文件,但每次代码都不起作用。 原始代码: 我有一个 PHP 代码,并尝试使用许多转换器将其转换为 Opencart 的 twig 模板文件,但每次代码都不起作用。 原代码: <?php $homepage = "/"; $currentpage = $_SERVER['REQUEST_URI']; echo $_SERVER['REQUEST_URI']; if ($homepage == $currentpage) { ?> some html here <?php } else { ?> other html here <?php } ?> 转换后的代码: {% set homepage "/" %} {% set currentpage _SERVER.REQUEST_URI %} {{ _SERVER.REQUEST_URI }} {% if homepage == currentpage %} some html here {% else %} other html here {% endif %} 我多次尝试更改代码,每次都发生错误。结果: 致命错误:未捕获的 Twig\Error\SyntaxError:意外的值为“/”的标记“字符串”(预期为“语句块结束”)。并且 _SERVER.REQUEST_URI 不起作用。 完成所有更改后,工作代码为: {% set homepage = '/' %} {% set currentpage = site_url %} {% if homepage == currentpage %} some html here {% else %} other html here {% endif %} 完成所有更改后,工作代码为: {% set homepage = '/' %} {% set currentpage = site_url %} {% if homepage == currentpage %} some html here {% else %} other html here {% endif %}
当我扩展 base.html.twig 时,Symfony 网页未显示
我在一个新项目中使用 Symfony,并且刚刚创建了一个控制器和一个模板来开始。我的控制器: 公共函数索引(){ 返回 $this->render('character/index.html.twig'); } ...
我需要使用特定于每种数据类型的过滤器来渲染未知类型的数据: 渲染的结构如下所示: 大批( “值”=>“渲染值”, “过滤器”=>“过滤到-
如果在 Twig 模板中找不到翻译,有没有办法默认使用空白字符串而不是翻译键? 我正在尝试使用默认值进行此类操作...