从Silex 2中的不同控制器获取变量

时间:2013-11-01 18:29:22

标签: silex

在Silex 2上制作第一个项目。 不知道如何从一个控制器为其他控制器提供变量。

$app -> get('links', function() use ($app) {
$foo="foo";
})
->bind('a1');   


$app -> get ('/links/result/', function() use ($app) {
echo $foo;
})
->bind('b2');

如何为“b2”显示$ foo?

2 个答案:

答案 0 :(得分:4)

如果您需要在两个控制器中执行某些操作,最好将其作为服务;然后它可用于两者。关于服务创建的Here's the Silex docs

您需要先创建一个类:

class MyFirstService
{
    public function getFoo()
    {
        return "foo";
    }
}

然后将其注册为(共享)服务:

$app["my-first-service"] = $app->share(function () { 
    return new MyFirstService();
});

最后你可以使用它:

$app->get('links', function() use ($app) {
    $foo = $app["my-first-service"]->getFoo();
})->bind('a1');   

$app->get ('/links/result/', function() use ($app) {
    $foo = $app["my-first-service"]->getFoo();
})->bind('b2');

上述链接文档页面还说明了如何访问您的其他服务。

答案 1 :(得分:0)

因为您正在使用: function() use ($app) { 在控制器闭包中 - 您可以使用$ app作为全局变量容器,如: $app['my_vars']['foo']='bar';

以完美的方式,您应该将数据模态类用于变量存储。