【问题标题】:How to use a custom class with silex ServiceProvider如何使用带有 silex ServiceProvider 的自定义类
【发布时间】:2012-10-28 20:40:21
【问题描述】:

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

我确实知道如何创建一个基本的服务提供者。

我不知道如何让这个服务提供者使用自定义类。我已经尝试了所有我能想到或在网络上找到的东西。部分问题是Silex关于这方面的文档不是很广泛,并且大多数关于此类问题的问题都是在对它的完成方式进行相当大的改变之前提出/回答的(或者看起来如此)所以答案不是最新的。

所以,简单地说: 我想使用 Silex 的 $app['myclass'] 类型系统来访问我的类,这样我就可以执行 $app['myclass']->myMethod() 之类的操作。

我被挂断的地方是,虽然我可以创建一个服务提供者,但我不知道如何让服务提供者识别这个类。我已经尝试使用 composer auto-load pso-0 设置整个命名空间,并尝试使用 MyClass/MyClass 类型的东西。

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

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

【问题讨论】:

    标签: php class symfony templating silex


    【解决方案1】:

    在我看来,您在加载类时遇到了问题。这是过去由 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 以重新转储自动加载文件,您应该能够访问您的类。

    【讨论】:

    • 嗨,igor,感谢您的及时回复——对不起,我花了这么长时间才回来。我一直在努力完成一个不同的项目,现在才重新开始解决这个问题。快速提问,当您说“将其添加到您的 composer.json 文件”时,您指的是根目录中的 composer.json 文件吗?
    • * 即包含'web'文件夹和'vendor'文件夹的根目录。
    • 再次感谢您的帮助。我整个下午都在阅读 Composer 文档,但仍然无法让自动加载器与类一起工作。我暂时离开了 Silex,只是试图让自动加载在最基本的层面上工作——但似乎做不到。这是一个包含最基本文件的 .zip。我正在尝试加载自定义类 Fledge\Select。你能看看它并告诉我它有什么问题吗? link
    • 你需要把namespace Fledge;放在文件的顶部。
    猜你喜欢
    • 2023-03-16
    • 2012-12-07
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多