gpt4 book ai didi

silex - 在 Silex 共享服务中访问 $app

转载 作者:行者123 更新时间:2023-12-02 08:37:56 26 4
gpt4 key购买 nike

我正在我的 app.php 文件中做这样的共享服务:

$app['rules'] = $app->share(function() use($app) {
return new MyProject\Rules($app);
});

然后:

namespace MyProject;

use Silex\Application;

class Rules
{

private $app;
public $request;

public function __construct(Application $app) {
$this->app = $app;
}


public test() {
print_r($this->app['something']);
}
}

但是当我在 $app['rules']->test(); 中访问 $app 时,它是一种新版本 $app,它没有我设置的变量稍后在应用程序其他部分的 $app 中。有什么方法可以访问父 $app 而不是这个内部版本?

最佳答案

您正在注入(inject)整个 $app进入Rules使用类型提示的构造函数 __construct(Application $app)但不是得到 $app在调用时由 DIC 注入(inject),您正在传递一个变量 $app在 ti 的当前状态(use 部分)。

你必须使用一个或另一个,你这样做的方式会覆盖类型提示并在当前状态下传递变量,不会注入(inject) future 的属性。

顺便说一句,您正在注入(inject)整个容器 (Silex\Application)。更好的方法是只注入(inject)您需要的服务。

$app['rules'] = $app->share(function($app) { //$app is Injected automatically when called
return new MyProject\Rules($app); //here you pass the whole container
return new MyProject\Rules($app['something']); //here you pass only the required dependency
});

MyProject中的代码很好,让构造函数保持原样。

关于silex - 在 Silex 共享服务中访问 $app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19366616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com