Փոփոխականների հայտնաբերումն ու ստուգումը Twig կաղապարներում
Երբ աշխատում եք Twig կաղապարի ֆայլի հետ, մեծ մասը փոփոխականներից նշված է կաղապարի ֆայլի մեկնաբանություններում։ Սակայն երբ դա այդպես չէ կամ երբ թեմաները կամ մոդուլները ներառում են նոր փոփոխականներ, անհրաժեշտ է գտնել բոլոր փոփոխականները, որոնք հասանելի են կաղապարում։ Twig-ը տրամադրում է dump() ֆունկցիա փոփոխականների հայտնաբերման և ստուգման համար կաղապարների ֆայլերում։
dump() ֆունկցիան չի արտածվի, եթե դեբագավորումը միացված չէ։ Իմանալ, թե ինչպես միացնել Twig-ի դեբագավորումը։
Դեբագավորումը միացնելուց հետո dump() ֆունկցիան կարող է օգտագործվել փոփոխականի կամ փոփոխականների մասին տեղեկատվություն արտածելու համար կաղապարում։
Մեկ փոփոխականի ստուգում
Եթե ձեր կաղապարում կա title փոփոխական, հետևյալը կարտածի դրա պարունակությունը․
{{ dump(title) }}
Կաղապարում հասանելի բոլոր փոփոխականների հայտնաբերում
Հայտնաբերելու և արտածելու համար կաղապարում հասանելի բոլոր փոփոխականներն ու դրանց պարունակությունը, ավելացրեք կաղապարում հետևյալը (դեբագավորման միացումից հետո):
{{ dump() }}
Արտածելու համար միայն հասանելի փոփոխականների բանալիները օգտագործեք՝
{{ dump(_context|keys) }}
Բոլոր Twig կաղապարներում հասանելի են նաև հավելյալ համընդհանուր փոփոխականներ՝
- _self-ն հղում է ընթացիկ կաղապարին և պարունակում է լրացուցիչ տվյալներ կաղապարի մասին, օրինակ՝ կոմպիլացված կաղապարի դասի անունը և Twig միջավայրի մասին տվյալներ։ _self-ն հնացած է և հեռացվել Twig 2.x-ից։
- _context-ը հղում է ընթացիկ կոնտեքստին և պարունակում է բոլոր փոփոխականները, որոնք փոխանցվել են կաղապարին, ինչպես՝ theme()-ից ուղարկվածները, նախապատրաստված պրեփրոցեսորից կամ կաղապարում սահմանվածները։ {{ dump() }}-ը առանց փոփոխականի նշման հավասար է {{ dump(_context) }}-ին։
- _charset-ը հղում է ընթացիկ սիմվոլների հավաքածուին։
Ստույգ եղեք dump()-ի հետ
Եթե ցանկանում եք տեսնել բոլոր փոփոխականները, բայց dump()-ը հանգեցնում է հիշողության սպառման ռեկուրսիվ տվյալների պատճառով, կարող եք տեսնել _context-ում բոլոր բանալիները՝
<ol> {% for key, value in _context %} <li>{{ key }}</li> {% endfor %} </ol>
Այնուհետև օգտագործեք պայմանավորված ստուգում (օրինակ՝ {% if loop.index == 2 %}), և արտածեք արժեքը միայն անհրաժեշտության դեպքում։
Լրացուցիչ տեղեկություններ
Տես Twig-ի dump ֆունկցիայի փաստաթղթումը՝ ավելի շատ իմանալու համար։
xdebug-ով դեբագավորում
Հաճախ խորհուրդ տրվող դեբագավորման եղանակն է օգտագործել IDE-ն xdebug հավելումով։
Հեշտագույն կարգավորումը PHPStorm (կոմերցիոն) + xdebug է։ Microsoft VSCode-ն անվճար, բաց կոդով IDE է, որի համար կան PHP և xdebug հավելումներ, որոնք անում են նույնը առանց կոմերցիոն ծրագրաշարի գնման։
xdebug-ի միջոցով կարող եք քայլ առ քայլ տեսնել փոփոխականի պարունակությունը և դրանով լուծել կոդի անորոշությունները, ինչպես նաև խուսափել անսահման կիկլերից, որոնք կարող են լինել dump կամ kint օգտագործելիս։
Կարող եք օգտվել նաև twig_xdebug փոքր օգտակար մոդուլից, որը օգնում է ցուցադրել հասանելի փոփոխականները xdebug-ում։
kint-ով դեբագավորում
Twig-ում dump() ֆունկցիան հաճախ շատ տեքստ է արտածում՝ դժվարացնելով անհրաժեշտը գտնել հսկայական տվյալների մեջ։
dump()-ի այլընտրանքը kint-ն է, PHP-ի դեբագավորման գործիք։ kint() ֆունկցիան նույն կերպ է աշխատում, ինչպես dump(), բայց ունի ընդլայնվող/համակարգված ինտերֆեյս փոփոխականների համար։
Devel նախագծը տրամադրում է devel kint մոդուլ, որը թույլ է տալիս մշակողներին օգտագործել kint() փոխարեն dump()։
1. Ներբեռնեք devel մոդուլը։
2. Վերցրեք devel kint մոդուլը։
3. Ինչպես dump()-ը, kint() չի արտածի, եթե դեբագավորումը միացված չէ։ Իմանալ Twig դեբագի միացման մասին։
4. Ձեր .twig ֆայլերում օգտագործեք kint() փոփոխականների ստուգման համար՝ ինչպես dump()-ում։
5. Եթե անհրաժեշտ է, ներբեռնեք և տեղադրեք Search Kint մոդուլը՝ բազմաշերտ փոփոխականների որոնման համար։
Whitelist policy մեթոդ և դաս
Օբյեկտների հետ աշխատելիս մենք սահմանափակում ենք (whitelist) թույլատրվող մեթոդների և հատկությունների մի ցանկ TwigSandboxPolicy դասի միջոցով։ Դա արվում է, որպեսզի խուսափել պատահական մեթոդների կանչից կաղապարներում։ Օրինակ՝ {{node.delete}}-ը կդարձնի հանգույցի ջնջում, եթե whitelist-ը չլինի։ Դուք կարող եք ընդլայնել whitelist-ը՝ ավելացնելով ձեր settings.php ֆայլում հետևյալը․
$settings['twig_sandbox_whitelisted_methods'] = [ 'id', 'label', 'bundle', 'get', '__toString', 'toString', 'referencedEntities', ];
Որտեղ 'referencedEntities'-ը մեթոդն է, որը ցանկանում եք օգտագործել ձեր կաղապարում։