目前我正在尝试实施此行为:
before.dispatch
基本上,我希望能够做到这一点:
$app->get('(/)', function() use ($app, $env) {
$env['title'] = 'My page title';
$app->render('index.tpl', array(
'test' => 'Test!!!',
));
});
虽然我也有这个:
$app->hook('slim.before.dispatch', function () use ($app, $env) {
$app->view()->appendData(array(
'env' => $env
));
if (!isset($env['partial']) || $env['partial'] != true)
$app->render('header.tpl');
});
问题是,$ env ['标题']仅在index.tpl
中提供,而不是header.tpl
,我假设是因为before.dispatch
,我还没有应用这条路线。
如何在不需要applyHook()
我需要更改标题模板变量的每个路径的情况下实现此行为?
谢谢!
答案 0 :(得分:0)
你有一个范围问题,你尝试从你的路径中获取一个变量到你钩子中的变量的方式根本不起作用。
相反,您应该添加$env
以通过路线中的$app->render()
电话进行观看,如下所示:
$app->render('index.tpl', array(
'test' => 'Test!!!',
'env' => $env,
));
当您这样做时,$env
中的数据将在任何slim.after
个钩子中可用。
重要:由于您要将'env'
附加到摘要中的视图数据,我强烈建议您命名页面标题数组键title
,否则请输入env数据您附加的render
方法将被覆盖。新的渲染参数如下所示:
$app->render('index.tpl', array(
'test' => 'Test!!!',
'title' => 'My page title',
));
您的模板引擎现在应该能够访问title
和header.tpl
中的index.tpl
。