2017-01-16 1 views
2

私は長い間laravelを使用しています。現在、私はワードプレスで働いています。 laravelのDD()機能の使用が大好きです。laravelと同じDD()関数を書くには?

しかし、ワードプレスでは、私はこれらを使用することができ、

print_r(), 
    var_dump(), 
    var_export().... 

これらのすべては、ちょうど全体配列またはオブジェクトを拡大しています。

しかし、私はlaravelのexpand閉じるの配列とオブジェクトを処理するメカニズムが必要です。

私は、一般的なDD必要として、次の使用

if (!function_exists('dd')) { 
function dd() 
    { 
     echo '<pre>'; 
     array_map(function($x) { var_dump($x); }, func_get_args()); 
     die; 
    } 
} 

それは良い作品が、私はスタイルとリストの形式を整理する必要が。

可能ですか?

+1

なぜ車輪を改造するのですか? https:// packagist。org/packages/symfony/var-dumper –

+0

@RajenderJoshi時には、木や石から作られたものの代わりにゴム製のタイヤが必要です。 Laravelは書式設定にのみvarDumperを使用します。データのダンプ後に実行が停止されないため、動作は_kind of_ differentです。 – Kaspars

答えて

1

Laravel ddは実際には素晴らしい機能です。しかし、実施メカニズムはvar_dumpであり、次にdieである。

例:

$arr = [1,2,3,4,5,6]; 
var_dump($arr); 
die(); 
+0

あなたは正しいです。しかし、どのようなスキーマのスキル。それは配列全体を詳述することはありません。場合によっては、配列が大きすぎる可能性があるためです。その場合、私たちはそれを使用できませんでした。しかし、laravelは、この問題を最小限にするためにいくつかのことを行います。 –

+0

では、 'var_dump()'が行く深さを設定できます。私はどのように覚えていない(私はそれがphp.iniにあるかもしれないと思う) – lenswipe

1

LaravelのddはsymfonyのVarDump componentを使用しています。次に、出力をフォーマットするグローバルに利用可能なdump関数があります。唯一の違いは、ダンプの後に「死んでしまう」ことがないということです。手動で行う必要がありますが、ほとんどの場合、それはあなたが望むものでもありません。

  1. 実行composer global require symfony/var-dumper(あなたがあなたのワードプレスのプロジェクトに作曲を持っていると仮定)
  2. php.iniファイルにauto_prepend_file = ${HOME}/.composer/vendor/autoload.phpを追加します。
  3. 時々、composer global update symfony/var-dumperを実行して最新のバグを修正してください。

ここに、VarDumperコンポーネントのドキュメントがあります。 https://symfony.com/doc/current/components/var_dumper.html

だからあなたdd関数は次のようになります。DDのようなLaravelに興味があるかもしれない他の人のために

if (!function_exists('dd')) { 
    function dd() 
    { 
     array_map(function($x) { 
      dump($x); 
     }, func_get_args()); 
     die; 
    } 
} 
2

次のことができますあなたのクラスuse Illuminate\Support\Debug\Dumper;にこの名前空間を持ち込み、次にこのような変数に使用してください:

(new Dumper)->dump($myVariable); 
2

以下は私自身のコードです。プレーンなPHP(フレームワークなし)でも動作します。

function d($data){ 
    if(is_null($data)){ 
     $str = "<i>NULL</i>"; 
    }elseif($data == ""){ 
     $str = "<i>Empty</i>"; 
    }elseif(is_array($data)){ 
     if(count($data) == 0){ 
      $str = "<i>Empty array.</i>"; 
     }else{ 
      $str = "<table style=\"border-bottom:0px solid #000;\" cellpadding=\"0\" cellspacing=\"0\">"; 
      foreach ($data as $key => $value) { 
       $str .= "<tr><td style=\"background-color:#008B8B; color:#FFF;border:1px solid #000;\">" . $key . "</td><td style=\"border:1px solid #000;\">" . d($value) . "</td></tr>"; 
      } 
      $str .= "</table>"; 
     } 
    }elseif(is_resource($data)){ 
     while($arr = mysql_fetch_array($data)){ 
      $data_array[] = $arr; 
     } 
     $str = d($data_array); 
    }elseif(is_object($data)){ 
     $str = d(get_object_vars($data)); 
    }elseif(is_bool($data)){ 
     $str = "<i>" . ($data ? "True" : "False") . "</i>"; 
    }else{ 
     $str = $data; 
     $str = preg_replace("/\n/", "<br>\n", $str); 
    } 
    return $str; 
} 

function dnl($data){ 
    echo d($data) . "<br>\n"; 
} 

function dd($data){ 
    echo dnl($data); 
    exit; 
} 

function ddt($message = ""){ 
    echo "[" . date("Y/m/d H:i:s") . "]" . $message . "<br>\n"; 
} 
関連する問題