Symfony:最后如何在 v4-v5 上使用自定义核心 PHP 库?

Symfony: so finally how to use custom core PHP library on v4-v5?

所以主题就是问题。是的,我已经搜索过这个论坛并用谷歌搜索过。我所拥有的一切 - 无用的 Symfony 文档和强制转换,一些一般性建议,cli-s,没有任何特定案例。也许 yahoo 或 duckduck 可以提供更好的帮助?

每个人都在谈论 bundle,谈论创建它们的重要性,可能是因为在幕后 Symfony 正在推动用户远离自定义库,但实际上没有人解释如何开始使用 bundle - 如何开始调用它的方法。

不,我的库不是作曲家或任何包。不,库方法不 return Response 对象。不,我不是在处理作曲家或重新编译或 cli(我使用 Composercat)。不,我不会将库放到 github 或 packagist 以通过 composer 或其他方式加载它,因为它是私有库。

抱歉,情绪跑题了。

关于案例:我已将我的图书馆放入文件夹

src/lib/MyLibrary.php

我怀疑库 class 是自动加载的,因为如果我不使用它扩展控制器(如果我声明 class MyLibrary 而不是 class MyLibrary extends Controller) - Symfony 吐出 "class name in use" 错误。

所以问题:在我的控制器中如何调用库方法?

$this->get('MyLibrary') 无效。

echo print_r($this) 也没有在此注册表中显示 MyLibrary。

看起来库文件已加载但未注册 and/or 已实例化。如果是这样,那么指向 Symfony 在哪里注册呢?

所以这个问题的大部分实际上是关于 php 如何管理 类。与 Symfony 无关。不过没关系。

首先最好将 project/src/lib 移动到 project/lib。 Symfony 在 src 目录中进行了一些扫描,您真的不希望将您的库混在其中。

所以:

# lib/MyLibrary.php
namespace Roman;

class MyLibrary
{
    public function hello()
    {
        return 'hello';
    }
}

请注意,我添加了一个名称空间(罗马)只是为了将您的代码与 Symfony 的代码区分开来。

现在您需要调整 composer.json 以允许 php 自动加载您的 类:

    "autoload": {
        "psr-4": {
            "App\": "src/",
            "Roman\": "lib/"
        }
    },

添加罗马线后,运行 "composer dump-autoload" 重新生成自动加载文件。

之后,这只是在您的应用程序中使用常规 php 的问题:

# src/Controller/DefaultController.php
namespace App\Controller;

use Roman\MyLibrary;
use Symfony\Component\HttpFoundation\Response;

class DefaultController
{
    public function index()
    {
        $myLibrary = new MyLibrary();
        $hello = $myLibrary->hello();
        return new Response($hello);
    }
}

这应该让你开始了。