在渲染之前,路径之后的Slim PHP Hook

时间:2013-12-09 21:23:19

标签: php routes slim

目前我正在尝试实施此行为:

  1. 我制作了几个路由器
  2. 在路由器内部,我更改了一个环境变量
  3. 可以在before.dispatch
  4. 上访问该环境变量

    基本上,我希望能够做到这一点:

    $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()我需要更改标题模板变量的每个路径的情况下实现此行为?

    谢谢!

1 个答案:

答案 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',
));

您的模板引擎现在应该能够访问titleheader.tpl中的index.tpl