2

私は symfony のTwigRedBeanとうまく連携させようとしています。

トップレベルの Bean のデータは表示できますが、その関係は表示できません。

これが私が意味することです:

私のコントローラーでは、標準的な方法 (やや疑似コード) で Twig を呼び出しています。

// Controller
$vars = array(
    'people' = R::find('person')
);

return $this->app['twig']->render('index.twig',$vars);

私の豆は次のように構成されています:

PERSON
->id
->first_name
->last_name
->company <-- (this represents a 'company' bean)

COMPANY
->id
->name

index.twigので、このように簡単に人の名前を出力できます...

{% for person in people %}
    {{person.first_name}}
{% endfor %}

...しかし、アクセスできるようにしたいのは、このような関連する会社のBeanです...

{% for person in people %}
    **{{person.company.name}}**
{% endfor %}

追加のコントローラー/モデルロジックを必要とせずに小枝テンプレート内からそれを行うにはどうすればよいですか?

4

3 に答える 3

4

これは基本的な問題を示しています。

protected function testQuery()
{
    $persons = \R::find('personx');
    foreach($persons as $person)
    {
        //$person->company;

        if ($person instanceof \ArrayAccess && isset($person['company']))
        {
            echo 'Got Array' . "\n";
        }
        echo get_class($person) . ' ' . $person->name . ' ' . $person->company->name . "\n";
    }
}

何が起こっているかというと、$person->company を実行すると company が遅延ロードされるということです。Twig は会社のプロパティを読み込もうとする前にその存在をチェックしますが、見つかりません。$person->company 行のコメントを外すと、テストは成功し、すべてがうまくいきます。

RedBeans には熱心な読み込みを許可するものは何もありませんでした。コントローラーを実行して、各人に対して $person->company を呼び出すだけです。または、Twig_Template::getAttribute(); をいじってみることができます。または、クエリを使用して配列を操作することもできます。

于 2012-03-06T16:58:06.327 に答える