0

在 Silex 2 上制作第一个项目。不知道如何使一个控制器的变量可用于其他控制器。

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


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

如何使 $foo 对“b2”可见?

4

2 回答 2

4

如果你需要在两个控制器中做某事,最好让它成为一个服务;那么它在两者中都可用。这是有关服务创建的 Silex 文档。

您需要先创建一个类:

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');

上面链接的文档页面还告诉您如何访问您的其他服务。

于 2013-11-01T19:51:43.280 回答
0

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

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

于 2014-08-13T13:31:37.850 回答