【问题标题】:symfony2: how to integrate a php library which is not a bundlesymfony2:如何集成不是捆绑包的 php 库
【发布时间】:2015-10-10 14:03:29
【问题描述】:

我正在尝试将 Agile CRM 集成到我的 Symfony2 应用程序中。

Agile 提供了一个 PHP 库: https://github.com/agilecrm/php-api

但它不是捆绑包。

如何将它正确集成到我的应用程序中?我应该在我的 app.php 或内核中添加一次要求吗?还是有更好的办法?

【问题讨论】:

    标签: php symfony shared-libraries integration agile-crm


    【解决方案1】:

    Composer 具有自动加载文件的功能

    https://getcomposer.org/doc/04-schema.md#files

    {
        "autoload": {
            "files": ["src/MyLibrary/functions.php"]
        }
    }
    

    其他方式?

    使用库中提供的代码将功能公开为Service

    【讨论】:

      【解决方案2】:

      我认为最好的方法是:

      • 为项目投稿添加composer.json
      • 有助于允许从其他地方加载配置,而不是硬编码

      然后您将能够简单地使用 composer 来加载该包。 :)

      【讨论】:

      • 那就太好了!我不是作曲专家,但我会看看
      • 你真的应该学习如何编写一个好的composer.json文件:)
      • 当然你可以做@Vamsi Krishna B 回答的事情,它会起作用,但有助于缓解对每个人来说都是更好的 IMO
      【解决方案3】:

      Composer(如其他答案中所述)只是一个依赖管理器,因此只是解决方案的一部分。如果您真的对最简洁的方式感兴趣,那很简单:自己编写包。

      事实上,有许多作为第三方库集成层的捆绑包示例。例如,查看https://github.com/nelmio/alice,这是一个 Symfony2 包,旨在包装 Faker,一个外部数据夹具库。

      bundle 可以声明可被应用程序主配置文件覆盖的配置选项。它可能会公开库对象的服务定义,这样您就可以避免手动创建它们并在需要时注入它们(无论库是否在考虑 DI 的情况下编写)。它也可能对 twig 扩展、事件监听器等有用。

      一个好的书面包可以促进重用、可测试性和关注点分离。不要害怕从头开始编写你的包,从这里开始http://symfony.com/doc/current/cookbook/bundles/best_practices.html

      【讨论】:

      • 请求的库“只是”一个函数,在这种情况下不需要捆绑。定义函数的文件只需要自动加载。
      • 他问是否确实存在更好的方法。嗯……答案是:确实如此。
      【解决方案4】:

      由于agilecrm/php-apiPackagist 上不可用,最好的方法是将存储库添加到您的composer.json 文件中,然后以与其他所有内容相同的方式安装包。

      {
          //...
          "repositories": [
              {
                  "type": "package",
                  "package": {
                      "name": "agilecrm/php-api",
                      "version": "2.1.0",
                      "source": {
                          "url": "https://github.com/agilecrm/php-api",
                          "type": "git",
                          "reference": "2.1.0"
                      }
                  }
              }
          ],
          "require": {
              //...
              "agilecrm/php-api": "2.1.0"
          }
      //...
      }
      

      【讨论】:

        【解决方案5】:

        你应该把它添加到你的 composer.json

        {
                "require": {
                    "agilecrm/php-api": "dev-master"
                },
                "repositories": [
                {
                    "type": "vcs",
                    "url":  "git@github.com:agilecrm/php-api.git"
                }
            ]
        }
        

        或者你可以将它添加到 composer autoloader https://getcomposer.org/doc/01-basic-usage.md#autoloading

        【讨论】:

        • hmmm,需要先有自己的composer.json
        • 所以在自动加载中将它添加到您的 composer.json(我的答案的第二部分)
        猜你喜欢
        • 1970-01-01
        • 2012-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-27
        相关资源
        最近更新 更多