Shankar Thiyagaraajan
Shankar Thiyagaraajan

Reputation: 1795

How to write own DD() function same as laravel?

I used laravel for a long time but currently I work with wordpress. I loved using the laravel's DD() function. But in wordpress I can only use these,

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

These all are just expand entire array or object. But I need laravel's expand and close mechanism for handling array and object. I use the following as general dd need,

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

It works well, but I need a styled and organised form of listing.

Is it possible ?

Upvotes: 35

Views: 124576

Answers (15)

Wakil Ahmed
Wakil Ahmed

Reputation: 1393

I use the following one. Learned from Jeffrey Way:

function dd($data)
{
    echo "<pre>";
        var_dump($data);
    echo "</pre>";

    die();
}

Upvotes: -1

Emre Dikmen
Emre Dikmen

Reputation: 1

if (!function_exists('dd')) {

    #[NoReturn] function dd(mixed $data):void
    {
        echo "<pre style='background:#1d1d1d; color: greenyellow; position:absolute; left: 0; top: 0; z-index: 9999999; width: 100%; height: 600px'>";
        print_r($data);
        echo '<pre>';
        die();
    }

}

Upvotes: -1

Coloured Panda
Coloured Panda

Reputation: 3467

Laravel's dd uses symfony's VarDump component. It provides a globally available dump function which formats the output. The only difference is that it won`t "die" after the dump, you'll have to do that manually - but in most cases that isn't even something you'd want.

  1. Run composer global require symfony/var-dumper (assuming you have composer in your wordpress project)
  2. Add auto_prepend_file = ${HOME}/.composer/vendor/autoload.php to your php.ini file;
  3. From time to time, run composer global update symfony/var-dumper to have the latest bug fixes.

Here is the documentation for the VarDumper component. https://symfony.com/doc/current/components/var_dumper.html

symfony/var-dumper version >= 4.1:

Since var-dumper version 4.1, dd() is already declared. Loading the library is enough.


symfony/var-dumper version <= 4.0:

Declare a dd function, dumping all arguments and stopping the process:

if (!function_exists('dd')) {
    function dd()
    {
        foreach (func_get_args() as $x) {
            dump($x);
        }
        die;
    }
 }

Upvotes: 46

Ram Pukar
Ram Pukar

Reputation: 1621

if(!function_exists('dd')) { 
    function dd($arrayData, $exit=TRUE) {
        echo "<pre>"; print_r($arrayData);
        if($exit===TRUE) die();
    }
}

Upvotes: -1

Abdalla A
Abdalla A

Reputation: 59

Here is the simplest solution:

if(!function_exists('dd'))
{
    function dd( $result )
    {
        echo '<pre>'; print_r($result); die();
    }
}

Upvotes: -1

Ngoc Nam
Ngoc Nam

Reputation: 557

I updated more functions and latest code of d functions below in debug functions package.

(Below answer is about 1 year ago.)

======================================

Below is my own code. It can work in plain PHP (no framework).

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";
}

Upvotes: 23

Ciprian Amariei
Ciprian Amariei

Reputation: 51

The @coloured-panda answer is not working anymore. Here is the updated code:

use Symfony\Component\VarDumper\VarDumper;

if (! function_exists('dd')) {
    /**
     * Dump the passed variables and end the script.
     *
     * @param  mixed  $vars
     * @return void
     */
    function dd(...$vars)
    {
        header('Access-Control-Allow-Origin: *');
        header('Access-Control-Allow-Methods: *');
        header('Access-Control-Allow-Headers: *');
        http_response_code(500);

        foreach ($vars as $v) {
            VarDumper::dump($v);
        }

        die(1);
    }
}

Upvotes: 1

chebaby
chebaby

Reputation: 7730

Most of the time i work with laravel framework, when it came to debugging the dd() helper method become a very handful tool.

But recently i was requested to work on a symfony 3.4 project, at first i use dump($my_vars); die(); to dump and die my vars. But that became quickly very combersome. So i ended up by adding a dd() global helper method to the symfony 3.4 project, here is how:

Inside src/ folder i created Support/ folder, inside of the Support/ folder i created helpers.php file where i added my dump helper functions.

src/Support/helpers.php

if (!function_exists('dd')) {

    /**
     * Dump the passed variables and end the script.
     *
     * @return void
     */
    function dd() {

        $args = func_get_args();

        call_user_func_array('dump', $args);

        die(1);
    }
}

You may need to add the new file (helpers.php) to your composer.json file to be loaded for you automatically, like this:

composer.json

{
    ...

    "autoload": {
        "psr-4": {
            "App\\": "src/"
        },
        "files": [
            "src/Support/helpers.php"
        ]
    },

    ...
}

Upvotes: 1

Mehran
Mehran

Reputation: 195

it works like a charm.

function dd()
{
   array_map(function($x) { var_dump($x); }, func_get_args()); die;
}

Upvotes: 4

Abdo-Host
Abdo-Host

Reputation: 4103

composer require --dev symfony/var-dumper

<?php     
if (! function_exists('dd')) {
            /**
             * Dump the passed variables and end the script.
             *
             * @param  mixed
             * @return void
             */
            function dd()
            {
                array_map(function ($value) {
                    if (class_exists(Symfony\Component\VarDumper\Dumper\CliDumper::class)) {
                        $dumper = 'cli' === PHP_SAPI ?
                            new Symfony\Component\VarDumper\Dumper\CliDumper :
                            new Symfony\Component\VarDumper\Dumper\HtmlDumper;
                        $dumper->dump((new Symfony\Component\VarDumper\Cloner\VarCloner)->cloneVar($value));
                    } else {
                        var_dump($value);
                    }
                }, func_get_args());
                die(1);
            }
        }

?>

Upvotes: 5

Husnain Aslam
Husnain Aslam

Reputation: 865

I do like this:

function dd($var){ 
    echo "<pre>";
    print_r($var);
    exit;
}

Upvotes: 2

luckyali444
luckyali444

Reputation: 296

You can use the package mp091689/dump-die and then you can do:

dd($variable);

OR

dd($variable1, $variable2, ..);

Upvotes: -1

Lucas Bustamante
Lucas Bustamante

Reputation: 17198

I do it like this:

function dd($a){
    var_dump($a);
    exit;
}

I use it all the time. Even created a Snippet for it in Sublime.

I also use var_masterpiece Chrome extension to get a nice output, where I can expand and collapse the array keys, etc.

Upvotes: 2

Bitclaw
Bitclaw

Reputation: 831

You can bring in this namespace in your class use Illuminate\Support\Debug\Dumper; and then use it for your variables like this:

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

Upvotes: 3

Arun Code
Arun Code

Reputation: 1638

The Laravel dd is actually a great function. However, the undergoing mechanism is var_dump and then die.

Example:

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

Upvotes: 5

Related Questions