Skip to content

Commit f6ae646

Browse files
committed
added feature to escape column values
1 parent 4ecf4a2 commit f6ae646

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

src/yajra/Datatables/Engines/BaseEngine.php

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ abstract class BaseEngine implements DataTableEngine
5959
protected $columns = [];
6060

6161
/**
62-
* DT columns definitions container (add/edit/remove/filter/order).
62+
* DT columns definitions container (add/edit/remove/filter/order/escape).
6363
*
6464
* @var array
6565
*/
@@ -69,6 +69,7 @@ abstract class BaseEngine implements DataTableEngine
6969
'excess' => ['rn', 'row_num'],
7070
'filter' => [],
7171
'order' => [],
72+
'escape' => [],
7273
];
7374

7475
/**
@@ -136,7 +137,7 @@ abstract class BaseEngine implements DataTableEngine
136137
/**
137138
* Output transformer.
138139
*
139-
* @var TransformerAbstract
140+
* @var \League\Fractal\TransformerAbstract
140141
*/
141142
protected $transformer = null;
142143

@@ -381,6 +382,19 @@ public function removeColumn()
381382
return $this;
382383
}
383384

385+
/**
386+
* Declare columns to escape values.
387+
*
388+
* @param string|array $columns
389+
* @return $this
390+
*/
391+
public function escapeColumns($columns = '*')
392+
{
393+
$this->columnDef['escape'] = $columns;
394+
395+
return $this;
396+
}
397+
384398
/**
385399
* Allows previous API calls where the methods were snake_case.
386400
* Will convert a camelCase API call to a snake_case call.

src/yajra/Datatables/Processors/DataProcessor.php

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,13 @@
1212
class DataProcessor
1313
{
1414

15+
/**
16+
* Columns to escape value.
17+
*
18+
* @var array
19+
*/
20+
private $escapeColumns = [];
21+
1522
/**
1623
* Processed data output
1724
*
@@ -55,6 +62,7 @@ public function __construct($results, array $columnDef, array $templates)
5562
$this->appendColumns = $columnDef['append'];
5663
$this->editColumns = $columnDef['edit'];
5764
$this->excessColumns = $columnDef['excess'];
65+
$this->escapeColumns = $columnDef['escape'];
5866
$this->templates = $templates;
5967
}
6068

@@ -77,7 +85,7 @@ public function process($object = false)
7785
$this->output[] = $object ? $value : $this->flatten($value);
7886
}
7987

80-
return $this->output;
88+
return $this->escapeColumns($this->output);
8189
}
8290

8391
/**
@@ -169,4 +177,23 @@ public function flatten(array $array)
169177

170178
return $return;
171179
}
180+
181+
/**
182+
* Escape column values as declared.
183+
*
184+
* @param array $output
185+
* @return array
186+
*/
187+
protected function escapeColumns(array $output)
188+
{
189+
return array_map(function ($row) {
190+
foreach ($row as $key => $value) {
191+
if (in_array($key, $this->escapeColumns) || $this->escapeColumns == '*') {
192+
$row[$key] = e($value);
193+
}
194+
}
195+
196+
return $row;
197+
}, $output);
198+
}
172199
}

0 commit comments

Comments
 (0)