这可能是一个简单的问题,但却让我感到头疼。
问题是我正在用fuelPHP,RedBean和Twig做一个项目。一切似乎都很好,我在这个框架上的进展非常好。
我遇到的问题我还没有找到任何解决方案,如果我从redbean获取对象,那么Twig无法访问 {{object.property}} 。这很奇怪,因为如果我使用自己的MVC框架,完全相同的代码(Twig + Redbean也可以):S
例如
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"}
答案 0 :(得分:3)
我为你调查了Twig,但这太复杂(不必要)潜入。 我不知道Twig。但是你试过使用RedBeanPHP作者编写的模板引擎吗?
这很简单。但与RedBeanPHP不同。 Gabor总是与众不同;)。
答案 1 :(得分:3)
最后我开始工作了。
问题出在FuelPHP框架中的Twig配置中。
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'
),
),
它会像魅力一样工作:)