如何使用带有silex ServiceProvider的自定义类

时间:2012-11-08 15:56:25

标签: php class symfony templating silex

我觉得我已经彻底搜索了整个互联网,但似乎无法想象这一个。我正在使用Silex(最新版本),似乎无法弄清楚如何使用Silex的ServiceProvider系统返回一个类的实例供使用。

我知道如何创建基本服务提供商。

我不知道该怎么做才能让这个服务提供商使用自定义类。我已经尝试了我能想到或在网上找到的所有内容。问题的一部分是Silex关于此的文档并不是非常广泛,并且在对它的完成方式(或者看起来如此)进行了相当大的改变之前,已经询问/回答了大多数关于此类问题的问题。答案不是最新的。

所以,简单地说: 我想使用Silex的$ app ['myclass']类型系统来访问我的类,这样我就可以做一些事情,比如$ app ['myclass'] - > myMethod()。

我挂断的是这个,虽然我可以创建服务提供商,但我无法弄清楚如何让服务提供商识别该类。我已经尝试使用composer auto-load pso-0设置完整的命名空间,并尝试使用MyClass / MyClass类型的东西。

哈哈,基本上,因为文档很少,所以可能有任何一部分我做错了。

有人会编写一个当前的分步流程来将自定义库/类连接到$ app变量吗?我认为这不仅有助于我,也有助于其他人。谢谢!

1 个答案:

答案 0 :(得分:7)

对我而言,就像你在课堂加载方面遇到的问题一样。这曾经是由silex中的autoload服务处理的。然而,该服务已被删除,有利于作曲家的自动加载。

您在composer.json中指定了自动加载功能。如果您不熟悉作曲家,请阅读introduction。有关自动加载的工作原理的详细信息,请参阅the autoloading section of the basic usage chapter

我会在这里给你一个简短的版本。确保您的文件名符合PSR-0命名标准。将其添加到您的composer.json

{
    "autoload": {
        "psr-0": {"Acme": "src/"}
    }
}

您需要将Acme替换为您的命名空间,将src替换为您的类的基本目录。例如,课程Acme\Foo\Bar位于src/Acme/Foo/Bar.php

然后运行php composer.phar update以重新转储自动加载文件,您应该可以访问您的课程。