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

Наглядные пример как использовать объект и обрабатывать его в твиг. Одновременно в примере я показываю как добавить атрибутику в хтмл код через 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;
    }
}

 

Как удалить сущность в доктрин
Моя сборка сайта и модулей Друпал 8 Часть 1

Советую почитать