কিভাবে দ্বিগুণ টেম্পলেটগুলিতে var_dump ভেরিয়েবল?


156

স্তর বিন্যাস দেখুন যেখানে আপনি কেবল যা দেওয়া হয়েছে তা উপস্থাপন করুন ভাল এবং সমস্ত, তবে কী কী উপলভ্য তা আপনি কীভাবে জানবেন? TWIG এ একটি "সমস্ত সংজ্ঞায়িত ভেরিয়েবলের তালিকাবদ্ধ করুন" কার্যকারিতা রয়েছে কি? একটি পরিবর্তনশীল ডাম্প করার উপায় আছে?

সমাধান আমি এটা অনুসন্ধানের জন্য পাওয়া একটি ফাংশন যেখানে আমি আমার ব্যবহার করতে পারেন সংজ্ঞায়িত করতে ছিল বিদ্যমান পিএইচপি ডিবাগ টুলস দ্বারা একটি ফাংশন ইনজেকশনের কিন্তু সমস্ত রেফারেন্স আমি যে পাওয়া যায় কোডের এই চমৎকার দুই লাইন অন্তর্ভুক্ত, কিন্তু কোথাও না নির্দিষ্ট যেখানে থেকে তাদের রাখুন। তাদের একটি $ লোডার ভেরিয়েবল সংজ্ঞায়িত করা দরকার তা জানতে গিয়ে আমি চেষ্টা করেছি /app/config/autoload.php তবে সেখানে $ লোডারটি ভুল ধরণের ছিল। একটি টুইগ ফাংশন যোগ করার জন্য আমি পিএইচপি কোডটি কোথায় রাখব?

উত্তর:


251


14
আমি যখন {{ dump() }}সমস্ত ভেরিয়েবল ডাম্প করার জন্য ব্যবহার করি তখন এটি একটি ফাঁকা পৃষ্ঠা ফেরত দেয়। ভেরিয়েবল ডাম্প করার অন্য কোনও উপায় আছে কি?
জেরি ফ্যাম

আমি সিমফনি 2.5 এর সর্বশেষ সংস্করণটি ব্যবহার করছি, এবং দেব পরিবেশের জন্য কার্নেলটি লোড করার সময় কনফিগারেশন.মিল এবং কনফিগার_দেহ.আইএমএল সেটআপ এবং ডিবাগ মোড চালু আছে। আমি নীচে মরল্যান্ডের দ্বারা উল্লিখিত অন্যান্য ম্যানুয়াল পদ্ধতিগুলি চেষ্টা করেছি। যে কোনও উপায়ে, ডাম্প ব্যবহার করা হলে আমি একটি ফাঁকা পৃষ্ঠাও পাই। এবং কোনও ডাম্প নেই।
চাদউইক মেয়ার 21

আপনি যদি এবং এর বাইরে একটি ফাঁকা পৃষ্ঠা পান তবে dumpঅবশ্যই dumpসমস্যাটি নয়। আপনি অন্যথায় এটি বের করতে না পারলে আমি একটি নতুন প্রশ্ন পোস্ট করার পরামর্শ দেব।
আইকোডফুড

1
- অজানা "ডাম্প" function` `Twig_Error_Syntax: আমি নিম্নলিখিত ত্রুটি পেতে
Pathros

28

আপনি debugট্যাগ ব্যবহার করতে পারেন , যা এখানে নথিভুক্ত করা হয়

{% debug expression.varname %}

সম্পাদনা করুন: টুইগ 1.5 এর হিসাবে, এটি হ'ল এবং নতুন dumpফাংশনটির সাথে প্রতিস্থাপন করা হয়েছে (দ্রষ্টব্য, এটি এখন একটি ফাংশন এবং কোনও ট্যাগ নেই)। আরও দেখুন: উপরে গৃহীত উত্তর।


7
যদি আপনি কোনও ত্রুটি বলতে বলতে পান তবে Unknown tag name "debug"আপনার কনফিগারেশনটি (বৈশ্বিক ক্ষেত্রে config.ymlবা config_dev.ymlএখানে বর্ণিত) প্রসারিত করুন: github.com/symfony/symfony-docs/issues/455#issuecomment-1884861
ফ্লু

5
এই পদ্ধতিটি ট্যুইগ ২.৫ হিসাবে অবহিত করা হয়েছে।
Icode4food

4
উত্তরে হ্রাসকারী নোট যুক্ত করেছে।
igorw

17

সুতরাং আমি এটি কাজ করেছিলাম, আংশিকভাবে কিছুটা হ্যাকিশ:

  1. সেট twig: debug: 1মধ্যেapp/config/config.yml
  2. এটি কনফিগার_দেভ.আইএমএলে যুক্ত করুন

    services:
        debug.twig.extension:
            class: Twig_Extensions_Extension_Debug
            tags: [{ name: 'twig.extension' }]
    
  3. sudo rm -fr app/cache/dev

  4. আমার নিজের ডিবাগ ফাংশন ব্যবহার করার জন্য পরিবর্তে print_r(), আমি খোলা vendor/twig-extensions/lib/Twig/Extensions/Node/Debug.phpএবং পরিবর্তন print_r(করার জন্যd(

পুনশ্চ. ফিল্টার এবং এক্সটেনশানগুলি যুক্ত করতে $ দ্বিখণ্ড পরিবেশটি কীভাবে / কোথায় গ্রহণ করব তা আমি এখনও জানতে চাই।


1
বিটিডাব্লু: ক্যাশে সাফ করার জন্য আপনি কনসোল সরঞ্জামটি ব্যবহার করতে পারেন ( স্ট্যাকওভারফ্লো.com
উকশনস /

এটা করার কোন সুবিধা আছে?
আলেকজান্ডার মরল্যান্ড

এটি আরও সোজা ... যদি আপনি কনসোল সরঞ্জামটি না জানেন তবে আমি আপনাকে এটি পরীক্ষা করে দেখার পরামর্শ দিই
রাফেল

3
আপনাকে সেট করতে হবে না twig: debug: 1কারণ এটি আপনার সামনের নিয়ামকের পরিবেশ থেকে এই তথ্যটি উত্তরাধিকার সূত্রে প্রাপ্ত। অন্যথায় আপনি আপনার প্রোড পরিবেশে অনিচ্ছাকৃতভাবে ডিবাগ তথ্য আউটপুট দিয়ে শেষ করতে পারেন। আপনি যতক্ষণ দেব পরিবেশে কাজ করছেন ততক্ষণ এটি ডিফল্টরূপে সক্ষম হয় এবং এটি আপনার উন্নত পরিবেশে অক্ষম থাকে।
ফ্লু

1
এটি টুইগের 1.5 হিসাবে পুরানো।। : অন্যান্য উত্তর দেখার stackoverflow.com/a/10080404/107768
Icode4food

14

আপনি যদি উপাদান হিসাবে আপনার প্রয়োগে টুইগ ব্যবহার করেন তবে আপনি এটি করতে পারেন:

$twig = new Twig_Environment($loader, array(
    'autoescape' => false
));

$twig->addFilter('var_dump', new Twig_Filter_Function('var_dump'));

তারপরে আপনার টেম্পলেটগুলিতে:

{{ my_variable | var_dump }}

কোথায় রাখবেন / প্রতিস্থাপন করবেন $twig = new Twig_Environment($loader, array(...?
পোলগ্রাফিক

5

আপনি যদি টাঙ্গিটকে একটি স্বতন্ত্র উপাদান হিসাবে ব্যবহার করেন তবে ডিবাগিং সক্ষম করার উপায়ের এটির উদাহরণ রয়েছে কারণ এটি ডাম্প (ভেরিয়েবল) ফাংশনটি সরাসরি বাক্সের বাইরে কাজ করবে unlikely

স্বতন্ত্র

এটি আইকোড 4 ফুড সরবরাহকারী লিঙ্কটিতে পাওয়া গেছে

$twig = new Twig_Environment($loader, array(
    'debug' => true,
    // ...
));
$twig->addExtension(new Twig_Extension_Debug());

Silex

$app->register(new \Silex\Provider\TwigServiceProvider(), array(
    'debug' => true,
    'twig.path' => __DIR__.'/views'
));

5

সমস্ত কাস্টম ভেরিয়েবল ডাম্প করুন:

<h1>Variables passed to the view:</h1>
{% for key, value in _context %}
    {% if key starts with '_' %}
    {% else %}
        <pre style="background: #eee">{{ key }}</pre>
        {{ dump(value) }}
    {% endif %}
{% endfor %}

আপনি আমার প্লাগইনটি ব্যবহার করতে পারেন যা এটি আপনার জন্য করবে (একটি আউটপুটটি সুন্দরভাবে ফর্ম্যাট করবে):

টুইগ ডাম্প বার


সুন্দর স্নিপেট ধন্যবাদ. এটি আমার জন্য কাজ করে যদি আমি ডাম্প (মান) সাথে মান প্রতিস্থাপন করি var_dump
ম্যাথিজ কোয়েভেটস

3

{{ dump() }}আমার জন্য কাজ করে না। PHPগলগ্রহ হয়ে যায়। নীড়ের স্তরটি খুব গভীর আমার ধারণা।

সমস্ত সত্যিই প্রয়োজন debugপল্লব টেমপ্লেট আপনি ব্যবহার করছেন যদি কোন debuggerমত একটি এক্সটেনশন হয় এই

তারপরে এটি ব্রেকআপপয়েন্ট সেট করার এবং {{ inspect() }}আপনার যেখানেই প্রয়োজন সেখানে কল করার বিষয়। আপনি একই হিসাবে {{ dump() }}কিন্তু আপনার ডিবাগারে একই তথ্য পাবেন ।


3

সিমফনি> = 2.6 থেকে, একটি দুর্দান্ত ভারডাম্পার উপাদান রয়েছে তবে এটি ট্যুইগেরdump() ফাংশন দ্বারা ব্যবহৃত হয় না ।

এটি ওভাররাইট করতে, আমরা একটি এক্সটেনশন তৈরি করতে পারি:

নিম্নলিখিত প্রয়োগে, নেমস্পেসগুলি প্রতিস্থাপন করতে ভুলবেন না।

Fuz/AppBundle/Resources/config/services.yml

parameters:
   # ...
   app.twig.debug_extension.class: Fuz\AppBundle\Twig\Extension\DebugExtension

services:
   # ...
   app.twig.debug_extension:
       class: %app.twig.debug_extension.class%
       arguments: []
       tags:
           - { name: twig.extension }

Fuz/AppBundle/Twig/Extension/DebugExtension.php

<?php

namespace Fuz\AppBundle\Twig\Extension;

class DebugExtension extends \Twig_Extension
{

    public function getFunctions()
    {
        return array (
              new \Twig_SimpleFunction('dump', array('Symfony\Component\VarDumper\VarDumper', 'dump')),
        );
    }

    public function getName()
    {
        return 'FuzAppBundle:Debug';
    }

}

হ্যাঁ আমি এটি খুঁজছিলাম :)
টিম স্ট্রিজডহর্স্ট

2

দ্রুত রেফারেন্সের জন্য এখানে সম্পূর্ণ রেসিপি (নোট করুন যে সমস্ত পদক্ষেপ বাধ্যতামূলক):

1) টুইগ ইনস্ট্যান্ট করার সময়, ডিবাগ বিকল্পটি পাস করুন

$twig = new Twig_Environment(
$loader, ['debug'=>true, 'cache'=>false, /*other options */]
);

2) ডিবাগ এক্সটেনশন যুক্ত করুন

$twig->addExtension(new \Twig_Extension_Debug());

3) এটি @ হাজারাপেট টুনানিয়ান নির্দেশিত মতো ব্যবহার করুন

{{ dump(MyVar) }}

অথবা

{{ dump() }}

অথবা

{{ dump(MyObject.MyPropertyName) }}

1

টুইগ টেম্পলেটগুলি ডিবাগ করার জন্য আপনি ডিবাগ স্টেটমেন্ট ব্যবহার করতে পারেন ।

এখানে চিত্র বর্ণনা লিখুন

সেখানে আপনি স্পষ্টভাবে ডিবাগ সেটিংস সেট করতে পারেন।


আমি সেই দ্বিগুণ.বিহীন ও সেট না করেই 'অজানা ট্যাগ নাম "ডিবাগ" পেয়েছি: সত্য
আলেকজান্ডার মরল্যান্ড

আপনি যদি প্রোড-মোডে কাজ করছেন তবে আপনাকে প্রথমে ক্যাশে সাফ করতে হবে
রাফেল

@ আলেকজান্ডারমোরল্যান্ড হাই অ্যালেক্স, ত্রুটি থেকে মুক্তি পেতে আপনাকে এখানে বর্ণিত হিসাবে আপনার কনফিগারেশনটি প্রসারিত করতে হবে : github.com/symfony/symfony-docs/issues/455#issuecomment-1884861 Unknown tag name "debug"
ফ্লু

1

আপনি সম্পাদনা করতে পারেন

/vendor/twig/twig/lib/Twig/Extension/Debug.php

এবং the var_dump()ফাংশন পরিবর্তন করুন\Doctrine\Common\Util\Debug::dump()


3
বিক্রেতার ফোল্ডারের অধীনে যে কোনও কিছু সম্পাদনা করা বাঞ্ছনীয় নয়।
লুইস মিলানিজ

1

যেহেতু বেশিরভাগ ভাল পিএইচপি প্রোগ্রামাররা XDebug ব্যবহার করতে পছন্দ করে চলমান কোডের মাধ্যমে পদক্ষেপ নিতে এবং বাস্তব সময়ের পরিবর্তনশীল পরিবর্তনগুলি দেখতে, dump()খারাপ পুরানো দিনগুলিতে ফিরে যাওয়ার মতো অনুভূতি ব্যবহার করে ।

এজন্য আমি একটি টুইগ ডিবাগ এক্সটেনশান করেছি এবং এটি গিথুবকে রেখেছি।

https://github.com/delboy1978uk/twig-debug

composer require delboy1978uk/twig-debug

তারপরে এক্সটেনশন যুক্ত করুন। আপনি যদি সিমফনি ব্যবহার না করে থাকেন তবে:

<?php

use Del\Twig\DebugExtension;

/** @var $twig Twig_Environment */
$twig->addExtension(new DebugExtension());

আপনি যদি হন তবে আপনার পরিষেবাদিগুলির মতো এই ওয়াইএএমএল কনফিগারেশন:

twig_debugger:
    class: Del\Twig\DebugExtension
    tags:
        - { name: twig.extension }

একবার নিবন্ধিত হয়ে গেলে আপনি এখন এটি কোনও দ্বিগুন টেম্পলেটে যে কোনও জায়গায় করতে পারেন:

{{ breakpoint() }}

এখন, আপনি এক্সডিবুগ ব্যবহার করতে পারেন, এক্সিকিউশনটি বিরতি দেবে এবং আপনি প্রসঙ্গ এবং পরিবেশ উভয়েরই সমস্ত বৈশিষ্ট্য দেখতে পাবেন।

আনন্দ কর! :-D


0

আপনি ডাম্প ফাংশন ব্যবহার করতে এবং এটি এটিকে মুদ্রণ করতে পারেন

{{ dump(MyVar) }}

তবে একটি দুর্দান্ত জিনিসও রয়েছে, যদি আপনি ডাম্প ফাংশনটির জন্য কোনও যুক্তি সেট না করেন তবে এটি সমস্ত ভেরিয়েবলগুলি মুদ্রণ করবে , যেমন

{{ dump() }}

হ্যাঁ, এটি কাজ করে, তবে আপনার নিশ্চিত করা দরকার যে টুইগ ইনস্ট্যান্ট করার সময় বিকল্পগুলিতে ডিবাগ সক্ষম হয়েছে
টিউডর ইলিশাই

0

আপনি যদি এমন পরিবেশে থাকেন যেখানে আপনি dumpফাংশনটি ব্যবহার করতে পারবেন না (উদা: ওপেনকার্ট), আপনি চেষ্টা করতে পারেন:

{{ my_variable | json_encode(constant('JSON_PRETTY_PRINT')) }}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.