Доступ к свойству объекта redbeanphp с помощью ветки

Это может быть простая проблема, но она портит мне голову.

Дело в том, что я делаю проект с FuelPHP, RedBean и Twig. Кажется, все работает нормально, и я очень хорошо работаю с этой структурой.

Проблема, с которой я сталкиваюсь, но пока не нашел решения, заключается в том, что Twig не может получить доступ к {{object.property}}, если я получаю объект из redbean. Что совершенно странно, потому что, если я использую свою собственную среду MVC, работает точно такой же код (также Twig + Redbean).

Например

public function action_messages() {
    $room = \Uri::segment(3);
    $this->data['messages'] = \R::find('message', 'room = ? ORDER BY id', array($room));
    
    // This is working because it's converting each row to array
    /*foreach($this->data['messages'] as $id => $message)
        $this->data['messages'][$id] = $message->export();*/
    
    return \Response::forge(\View::forge('chat/messages.twig', $this->data));
}

Все работает, как и ожидалось, если я получаю экспорт как массив, а не как объект.

{%for message in messages%}
     <b>{{message.user.id}}</b>{{message.datetime}}: {{message.text}}
{%endfor%}

Я действительно потерян с этим. Поэтому буду признателен за любую возможную помощь.

Изменить: (Подробнее)

Если я положу

{%for message in messages%}
{{message}}<br/>
{%endfor%}

Я получаю этот вывод от Var.

{"id":"23","text":"A test","room":"1","datetime":"2012-10-05 15:32:36","user_id":"1"}

person Alrik    schedule 05.10.2012    source источник
comment
может быть, это просто то, как я смотрю на это и основываясь на том, как я использую ветку, но я не вижу, как сообщения даже передаются в ветку для обработки. Я вижу $this-›data, если я не ошибаюсь, это не сработает, поскольку вы даете ему массив и используете только ключ в логике цикла ветки. чего-то здесь не хватает.   -  person Eddie    schedule 06.10.2012
comment
$this-›data является общедоступным массивом в классе. Что именно вы имели в виду под логикой цикла ветки? Мне действительно нужно покопаться в этом, потому что это заставляет меня чувствовать себя глупо или что-то в этом роде (у меня есть 5 проектов, где все работает, как и ожидалось, 2 из них с FuelPHP нет)   -  person Alrik    schedule 06.10.2012
comment
Наконец-то я нашел проблему (все еще не решенную). Но по какой-то причине Twig сбрасывает содержимое var как String, а не как объект или массив. 13 => string '{&quot;id&quot;:&quot;13&quot;,&quot;text&quot;:&quot;adsadsads&quot;,&quot;room&quot;:&quot;1&quot;,&quot;datetime&quot;:&quot;2012-10-05 14:29:08&quot;,&quot;user_id&quot;:&quot;1&quot;}' (length=188)   -  person Alrik    schedule 06.10.2012


Ответы (2)


Я изучил Twig для вас, но он слишком сложен (излишне), чтобы погрузиться в него. Я не знаю о Twig. Но пробовали ли вы использовать механизм шаблонов, написанный автором RedBeanPHP?

http://gabordemooij.com/se/

Это просто. Но другой, как RedBeanPHP. Габор всегда разный ;) .

person Gabor de Mooij    schedule 05.10.2012
comment
Привет, Габор (мне очень нравится твой ORM, простой, быстрый и точный). Я обещаю попробовать Stamp. Но в этом случае мне очень нужна мощь Twig, упрощающая многие вещи. - person Alrik; 06.10.2012

Наконец-то я заработал.

Проблема была в конфиге Twig во фреймворке FuelPHP.

Параметр auto_encode выполняет преобразование json в массив в случае свойств объекта. Поэтому вы ДОЛЖНЫ установить для него значение false (по умолчанию это правда).

Настройте свою конфигурацию, чтобы получить что-то вроде этого.

// TWIG ( http://www.twig-project.org/documentation )
// ------------------------------------------------------------------------
'View_Twig' => array(
    'include' => APPPATH.'vendor'.DS.'Twig'.DS.'Autoloader.php',
    'auto_encode' => false, // Remember to set this to false
    'views_paths' => array(APPPATH.'views'),
    'delimiters' => array(
        'tag_block'     => array('left' => '{%', 'right' => '%}'),
        'tag_comment'   => array('left' => '{#', 'right' => '#}'),
        'tag_variable'  => array('left' => '{{', 'right' => '}}'),
    ),
    'environment' => array(
        'debug'                => false,
        'charset'              => 'utf-8',
        'base_template_class'  => 'Twig_Template',
        'cache'                => APPPATH.'cache'.DS.'twig'.DS,
        'auto_reload'          => true,
        'strict_variables'     => false,
        'autoescape'           => false,
        'optimizations'        => -1,
    ),
    'extensions' => array(
        'Twig_Fuel_Extension'
    ),
),

И это будет работать как шарм :)

person Alrik    schedule 06.10.2012