Обработка объекта в стринг для шаблона Twig

Ссылка на видео https://www.youtube.com/watch?v=Dl3YxN739lo
Наглядные пример как использовать объект и обрабатывать его в твиг. Одновременно в примере я показываю как добавить атрибутику в хтмл код через PHP.
<?php
namespace App\Utils;
class Attributes implements \ArrayAccess, \IteratorAggregate
{
protected $storage;
public function __construct(array $attributes = [])
{
foreach($attributes as $name => $value){
$this->offsetSet($name, $value);
}
}
public function addClass(){//->addClass(['data-class data-class-two'], 'data-class-twu')
$args = func_get_args();
if($args){
$classes = [];
foreach ($args as $arg){
$classes = array_merge($classes, (array) $arg);
}
if($this->offsetExists('class')){
$storageClass[] = $this->offsetGet('class');
$classes = array_merge($storageClass ,$classes);
}
$this->offsetSet('class', implode(" ", $classes));
}
return $this;
}
public function removeClass(){
if($this->offsetExists('class')){
$args = func_get_args();
if($args){
$classes = [];
foreach ($args as $arg){
$classes = array_merge($classes, (array) $arg);
}
$storageClass = explode(" ",$this->offsetGet('class'));
$classes = array_values(array_diff($storageClass, $classes));
$this->offsetSet('class', implode(" ", $classes));
}
}
return $this;
}
public function setAttributes($name, $value){
$this->offsetSet($name, $value);
return $this;
}
public function removeAttributes(){
$args = func_get_args();
foreach ($args as $arg){
if(is_array($arg)){
foreach ($arg as $name){
$this->offsetUnset($name);
}
} else {
$this->offsetUnset($arg);
}
}
return $this;
}
public function getIterator()
{
return new \ArrayIterator($this->storage);
}
public function offsetExists($offset)
{
return isset($this->storage[$offset]);
}
public function offsetGet($offset)
{
if(isset($this->storage[$offset])){
return $this->storage[$offset];
}
}
public function offsetSet($offset, $value)
{
$this->storage[$offset] = $value;
return $this;
}
public function offsetUnset($offset)
{
unset($this->storage[$offset]);
}
public function __toString()
{
$return = '';
$list = [];
foreach ($this->storage as $name => $value){
$list[] = $name.'="'.$value.'"';
}
if(!empty($list)){
$return = implode(" ", $list);
}
return $return;
}
}