用树枝生的树枝 (2)

Posted

技术标签:

【中文标题】用树枝生的树枝 (2)【英文标题】:Twig raw with twig (2) 【发布时间】:2022-01-02 01:42:34 【问题描述】:

我有与set-default-raw-filter-in-twig 和twig-raw-with-twig 类似的问题,但方式不同。 我使用数据库的两个表。

第一个 edition 包含 DateTime 格式的日期,用作我们比赛的截止日期。 在这里,属性dateouverturesite 的值是2021-05-08 00:00:00

第二个,odpf_article 包含要在我的渲染中使用的文本。那是用 html 标记格式化的文本。

在其中一个文本中,我希望显示第一个表格中的日期。我试图将这些引用作为 Twig 变量:Twig in Twig!

我在 Symfony 控制器中的功能:

    public function concours(Request $request,$choix): \Symfony\Component\HttpFoundation\Response
        
            $edition = $this->session->get('edition');
            $repo2=$this->getDoctrine()->getRepository(OdpfArticle::class);
            $article=$repo2->findOneBy(['choix'=>$choix]);
            $texte=$article->getTexte();
            $tab=[ 'choix'=>$choix,
                  'texte'=>$texte,
                  'edition'=>$edition ];
            return $this->render('core/odpf-concours.html.twig', $tab);
        

texte 属性中的一些行

     <p><strong>PHASE D’INSCRIPTION</strong></p>
     <ul>  
       <li> ouverture des inscriptions :app.session.get('edition').date_ouverture_site </li> 
       <li>app.session.get('edition').date_cloture_inscriptions
     <span style="color: red;"><strong>(heure de Paris)</strong></span>
     : clôture des inscriptions
       </li> 
    </ul>

渲染的线条:

                <div class ="contenu">
                     texte|escape('html') 
                </div>

或者使用原始过滤器:

                <div class ="contenu">
                     texte|raw 
                </div>

最终结果(两个过滤器相同: **PHASE D’INSCRIPTION** ouverture des inscriptions : app.session.get('edition').dateouverturesite **(heure de Paris)**

我的问题是:如何编写我的 Twig 变量?

我有十个不同的日期要显示在同一个texte 中,还有一个过滤器要应用以仅显示月份和日期...

我对 DarkBee 提供的链接的回答是:

    我把线路改成了 include(template_from_string(texte)) 例外是:Object of class DateTime could not be converted to string 所以,我写了我的模板行date(app.session.get('edition').dateouverturesite) 我也有同样的例外...

【问题讨论】:

所以你有twig 存储在数据库中? @DarkBee :我的数据库中包含 HTML 和 Twig 变量的混合内容:

PHASE D'INSCRIPTION

ouverture des inscriptions :app.session.get('edition').date_ouverture_site app.session.get('edition').date_cloture_inscriptions (heure de Paris) : clôture des inscriptions
这能回答你的问题吗? How to render Twig template from database in symfony2 @DarkBee 谢谢,但我已经尝试了几个小时来适应它,而且......没有改变! 那么请将问题更新为您所做的新尝试。还特别在我链接的问题中查看这个answer 【参考方案1】:

您必须使用波浪号 "string" ~ var ~ "more string" 将变量与字符串连接

% set something = 'stuff' %
% set texte = '<ul>
      <li> ouverture des inscriptions :' ~ something ~ ' 
      </li>
    </ul>' %
    
 texte|raw 

结果:

<ul>
    <li> ouverture des inscriptions :stuff 
    </li>
</ul>

但是,我怀疑您真正想要做的是使用模板片段,尤其是在插入的值可能发生变化的情况下。

# src: _fragment.html.twig #
    <ul>
      <li> ouverture des inscriptions : app.session.get('edition').date_ouverture_site   
      </li>
    </ul>

然后根据需要将它包含在任何你想要的地方

# src: main.html.twig #

<div>
  <h1>The list:</h1>
   include('_fragment.html.twig') 
</div>

<div>
  <h4>That list again:</h4>
   include('_fragment.html.twig') 
</div>

【讨论】:

如果你想将HTML存储在一个变量中,使用% set var %...% endset % - demo会更方便 @Arleigh Hix :这非常困难:我必须在同一文本中包含 10 个不同的日期(请参阅我对 DarkBee 评论的回答中的示例)

以上是关于用树枝生的树枝 (2)的主要内容,如果未能解决你的问题,请参考以下文章

怎样让真树叶保持在树枝

如何把树枝上的树叶,用机械方法摘下来。

干树枝和树叶怎么分离

P2015 二叉苹果树

洛谷P2015 二叉苹果树(树状dp)

用树枝和界限熄灯