第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Twig 自動(dòng)刪除撇號(hào)和引號(hào)

Twig 自動(dòng)刪除撇號(hào)和引號(hào)

PHP
慕村225694 2021-12-03 15:41:08
TransTokenParser為了學(xué)習(xí)(解析{% trans %}和{% trans with %}),我創(chuàng)建了自己的-> 并且解析器本身運(yùn)行良好,除了后一種變體:trans with.解析器讀出分配的變量,但會(huì)自動(dòng)轉(zhuǎn)義",'因此它們不會(huì)顯示(變量沒有'或"直接來自解析器)。例如,我們在樹枝中有這個(gè)塊:{% trans with {'{test}': coolFunctionWhichReturnsString('testParameter')} %}UNIQUE_TRANS_ID{% endtrans %}這個(gè)塊被 trans 和諸如此類的東西解析得很好,但將“with”之后的部分變成了這樣: {{test}: coolFunctionWhichReturnsString(testParameter)}我試過在 Twig_Environment 中設(shè)置一個(gè)參數(shù)new Twig_Environment(..., ['autoescape' => false])我試過在 config.yml 下的 twig 中設(shè)置一個(gè)全局變量:autoescape: false這兩種解決方案都沒有反映 twig -> php 行為的變化。(它將 autoescape 設(shè)置為 false,如在此處初始化樹枝環(huán)境時(shí)的 var_dump 中所見:array (size=13)  'debug' => boolean true  'charset' => string 'UTF-8' (length=5)  'base_template_class' => string 'Twig_Template' (length=13)  'strict_variables' => boolean true  'autoescape' => boolean false這是我的代碼:/** * @return array * @throws \Twig_Error_Syntax */private function parseVariant(): array{    $stream = $this->parser->getStream();    $trans = null;    $json = null;    //SIMPLE VARIANT trans    $stream->nextIf(\Twig_Token::PUNCTUATION_TYPE, '');    if (null !== $stream->nextIf(\Twig_Token::BLOCK_END_TYPE)) { //%} TRANS_LITERAL        $stream->nextIf(\Twig_Token::PUNCTUATION_TYPE, '');        $trans = $stream->expect(\Twig_Token::TEXT_TYPE)->getValue();    } elseif (null !== $stream->nextIf(\Twig_Token::NAME_TYPE, 'with')) { // {% trans with {} %} TRANS_LITERAL        $stream->next();        $json = implode($this->getInlineParams());        $stream->nextIf(\Twig_Token::PUNCTUATION_TYPE);        $stream->nextIf(\Twig_Token::BLOCK_END_TYPE);        $stream->nextIf(\Twig_Token::PUNCTUATION_TYPE);        $trans = $stream->expect(\Twig_Token::TEXT_TYPE)->getValue();        //die();    }  編輯:使用 ExpressionParser 會(huì)引發(fā)錯(cuò)誤,因?yàn)殒I/值沒有 "" 或 ''..另一個(gè)編輯:我已經(jīng)嘗試在 twig 中修改運(yùn)行時(shí)和初始化后的“轉(zhuǎn)義”擴(kuò)展,包括所有策略 - 沒有任何幫助有什么建議?提前致謝。
查看完整描述

1 回答

?
MMMHUHU

TA貢獻(xiàn)1834條經(jīng)驗(yàn) 獲得超8個(gè)贊

這是一個(gè)雙重問題:第一個(gè)可能是在getInlineParams函數(shù)中簡化邏輯的方法,這對于這些簡單的情況可能沒有問題,但對于更復(fù)雜的情況可能會(huì)很糟糕。

第二個(gè)問題是完全無視類型。

{'{test}': coolFunctionWhichReturnsString('testParameter')}

被解析為(讀作“字符串值”-“令牌類型”):

  • { - 阻止開始

  • {test} - 一個(gè)字符串

  • : - 標(biāo)點(diǎn)符號(hào)

  • coolFunctionWhichReturnsString - 一個(gè)名字

  • ( -(不確定是哪種類型)

  • testParameter - 一個(gè)字符串

  • ) - (再次)

  • } - 塊結(jié)束

當(dāng)您嵌套多個(gè) {} 時(shí),第一個(gè)問題將展開。第二個(gè)問題是由于一個(gè)簡單的事實(shí):

類型很重要。

詞法分析器有一項(xiàng)非常重要的任務(wù),它刪除用戶可能選擇表達(dá)字符串、注釋的所有不同變體,它刪除不相關(guān)的空格(因?yàn)樗皇请s亂無章)等等?,F(xiàn)在,如果你把每個(gè)Token(有一個(gè)值和一個(gè)類型)當(dāng)作只是一個(gè)包含你想要的字符串的奇怪對象,你就會(huì)遇到問題 - 很明顯。

因此,如果要重新創(chuàng)建類似于原始輸入的內(nèi)容,則必須查看類型并在類型為字符串時(shí)添加引號(hào)。(文本可能是塊之外的所有東西)

這將是您所述問題的快速“解決方案”

但是,從長遠(yuǎn)來看,忽略標(biāo)記的語義會(huì)導(dǎo)致問題……因?yàn)槟€必須以某種方式處理“coolFunctionWhichReturnsString”,即,您必須將其轉(zhuǎn)換為某個(gè)函數(shù)調(diào)用。從理論上講,您應(yīng)該真正構(gòu)建一個(gè) AST 并在某個(gè)時(shí)候?qū)⑵渚幾g成適當(dāng)?shù)男问?.....

樹枝解析器使用一種方法subparse來解析內(nèi)容,直到出現(xiàn)某個(gè)“結(jié)束”。(建立 AST,因?yàn)榻Y(jié)構(gòu)在某些時(shí)候也很重要)

更新:事實(shí)證明,在樹枝文檔中有一個(gè)用于編寫節(jié)點(diǎn)解析器的頁面,如果您遵循https://twig.symfony.com/doc/2.x/advanced.html,它可能會(huì)簡化很多#registering-a-new-tag(信息從略高于“注冊新標(biāo)簽”開始,非常簡化了值的解析和使用)


查看完整回答
反對 回復(fù) 2021-12-03
  • 1 回答
  • 0 關(guān)注
  • 237 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)