1

这可能是一个简单的问题,但让我头疼。

问题是我正在用fuelPHP、RedBean 和Twig 做一个项目。一切似乎都很好,我在这个框架上进展得非常好。

我遇到的尚未找到任何解决方案的问题是,{{object.property}}如果我从 redbean 获取对象,则无法访问 Twig。这很奇怪,因为如果我使用自己的 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"}
4

2 回答 2

3

最后我让它工作了。

问题出在 FuelPHP 框架中的 Twig 配置中。

auto_encode 参数在对象属性的情况下将 json 转换为数组。因此,您必须将其设置为 false(默认情况下为 true)。

调整你的配置以获得类似的东西。

// 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'
    ),
),

它会像魅力一样发挥作用:)

于 2012-10-06T12:05:20.567 回答
3

我为您调查了 Twig,但它太复杂(没必要),无法深入了解。我不了解 Twig。但是你试过用RedBeanPHP作者写的模板引擎吗?

http://gabordemooij.com/se/

这很简单。但不同的是,像 RedBeanPHP。Gabor 总是与众不同 ;) 。

于 2012-10-05T20:58:41.873 回答