'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 ?
Solution 1:[1]
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.
- Run
composer global require symfony/var-dumper(assuming you have composer in your wordpress project) - Add
auto_prepend_file = ${HOME}/.composer/vendor/autoload.phpto your php.ini file; - From time to time, run
composer global update symfony/var-dumperto have the latest bug fixes.
Here is the documentation for the VarDumper component. https://symfony.com/doc/current/components/var_dumper.html
Before var-dumpr version 4.1:
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;
}
}
After var-dump version 4.1:
Since var-dumper version 4.1, dd() is already declared. Loading the library is enough.
Solution 2:[2]
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";
}
Solution 3:[3]
For others who might be interested in Laravel like dd(), please check this repo -
Solution 4:[4]
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();
Solution 5:[5]
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);
Solution 6:[6]
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);
}
}
?>
Solution 7:[7]
I do like this:
function dd($var){
echo "<pre>";
print_r($var);
exit;
}
Solution 8:[8]
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.
Solution 9:[9]
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"
]
},
...
}
Solution 10:[10]
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);
}
}
Solution 11:[11]
You can use the package mp091689/dump-die and then you can do:
dd($variable);
OR
dd($variable1, $variable2, ..);
Solution 12:[12]
it works like a charm.
function dd()
{
array_map(function($x) { var_dump($x); }, func_get_args()); die;
}
Solution 13:[13]
Here is the simplest solution:
if(!function_exists('dd'))
{
function dd( $result )
{
echo '<pre>'; print_r($result); die();
}
}
Solution 14:[14]
if(!function_exists('dd')) {
function dd($arrayData, $exit=TRUE) {
echo "<pre>"; print_r($arrayData);
if($exit===TRUE) die();
}
}
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
