2015-11-25 3 views
1

У меня есть поле типаSymfony Учение Visible в Twig

/** 
* @var array 
* 
* @ORM\Column(name="raw", type="json_array", nullable=true) 
*/ 
private $raw; 

и я поставил в этой сфере формат данных JSON

$jsonRaw = array(
        'repository_language' => $repository['language'], 
        'used_languages' => $languages, 
        'commits' => $commits, 
        'scooped_branch' => $sha, 
        'first_commit' => empty($this->committer[0]['author']) ? null : $this->committer[0], 
        'last_commit' => empty($this->committer[1]['author']) ? null : $this->committer[1] 
       ); 

и установить в сущности

$entity->setRaw(json_encode($jsonRaw)); 

, а затем у меня есть данные в этом поле field_data и я, отображая это поле в шаблоне, но имеют ошибку

   {% for languages in project.raw.used_languages|json_decode %} 
        <div class="row col-sm-2" style="position: relative; text-align: center; margin: 0; padding: 0;"> 
         <small style="color: #00312f;"> 
          <strong>{{ languages.lang }}</strong>:<br> 
          {{ languages.percent|round(1, 'floor') }}%<br> 
         </small> 
        </div> 
       {% endfor %} 

Impossible to access an attribute ("used_languages") on a string variable ("{"repository_language":"PHP","used_languages":[{"lang":"PHP","percent..... 

Почему? Я это, может быть, прут не друг с JSON и создать собственный прут фильтр

class VarsExtension extends Twig_Extension 
{ 
protected $container; 

public function __construct(ContainerInterface $container) 
{ 
    $this->container = $container; 
} 

public function getName() 
{ 
    return 'some.extension'; 
} 

public function getFilters() { 
    return array(
     'json_decode' => new \Twig_Filter_Method($this, 'jsonDecode'), 
    ); 
} 

public function jsonDecode($str) { 
    return json_decode($str); 
} 
} 

и попытаться использовать

   {% for languages in project.raw.used_languages|json_decode %} 
        <div class="row col-sm-2" style="position: relative; text-align: center; margin: 0; padding: 0;"> 
         <small style="color: #00312f;"> 
          <strong>{{ languages.lang }}</strong>:<br> 
          {{ languages.percent|round(1, 'floor') }}%<br> 
         </small> 
        </div> 
       {% endfor %} 

и до сих пор ошибка

Impossible to access an attribute ("used_languages") on a string variable ("{"repository_language":"PHP","used_languages":[{"lang":"PHP","percent":75.976812123425},{"lang":"JavaScript","percent":13.194136518949},{"lang":"CSS","percent":10.829051357625}], 

помощь, пожалуйста, я не имею понятия (

+0

применить фильтр json_decode перед доступом к элементу по ключу – Matteo

+3

{% set raw = project.raw | json_decode%} {{raw.used_languages}} – Snoozer

+0

Snoozer: thtks very match –

ответ

1

Вы можете просто применить фильтр json_decode до доступа к элементу по ключу, например, пример @Snoozer:

{% set raw = project.raw | json_decode %} {{ raw.used_languages }} 
Смежные вопросы