2
我在我的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
而不是內部版本?
如果我不在'Rules()'中傳遞任何東西,它似乎沒有任何方法可以訪問Rules類中的$ app。你建議'返回新的MyProject \ Rules($ app);'和'public function __construct($ app)'? (我需要在我的共享函數中使用整個$ app)。 – David
我會用代碼示例更新我的答案以做你想做的事,但我強烈建議你多閱讀一下[Pimple](https:// github.com/fabpot/Pimple)(Silex的依賴注入容器組件)用於更好地理解Silex的工作原理。 – xmarcos
我更新了代碼,如果仔細觀察,我沒有使用'use'來傳遞'$ app',它將在Silex的通話時注入。 – xmarcos