【问题标题】:How to write composer.json while my own system is a vendor?当我自己的系统是供应商时如何编写composer.json?
【发布时间】:2014-09-12 10:51:42
【问题描述】:

我已经开始学习作曲家,我正在尝试构建一个 composer.json 文件,我想将我的所有基类(即自定义框架)作为供应商本身与其他依赖项一起放置。

场景是我正在使用 Slim、Twig 和 Laravel ORM 等构建一个小框架,我想将我的框架(及其所有依赖项)放在文档根目录之外的文件夹中,因为它可以用于多个通过在 PHP.ini 或 set_include_path() 中设置的自定义 PHP 包含路径的项目。我正在使用 VPS。

我的文件夹结构如下:

/path/to/my/own/framework
 |----> composer.json
 |----> composer.lock
 |----> vendor
         |----> slim
         |----> illuminate
         |----> twig
         |----> om
                 |----> OmFramework (this is my own framework)
                          |----> Factory
                                  |----> BaseController.php
 ....

到目前为止,我已经编写了以下composer.json:

{
    "name": "....",
    "description": "....",
    "keywords": ["..."],
    "license": "MIT",
    "authors": [
        {
            ....
        }
    ],
    "require": {
        "php": ">= 5.3.0",
        "slim/slim": "2.4.*",
        "slim/views":"0.1.2",
        "twig/twig": "1.*",
        "twig/extensions": "*",
        "itsgoingd/slim-facades": "dev-master",
        "illuminate/database" : "4.*",
        "cartalyst/sentry" : "2.*",
        "ircmaxell/password-compat": "1.0.*"
    },
    "autoload": {
        "psr-0": { "OmFramework": "." }
    }
}

为了通过 composer.json 文件从 om/OmFramework 加载我的所有类,我应该在自动加载部分写入什么内容?任何指导将不胜感激。

BaseController.php 文件:

<?php
namespace OmFramework\Factory;

class BaseController {
        public function __construct()
        {
                //TO-DO:
        }

        public function sayHello() 
        {
                echo 'Hello World!' . "\n";
        }
}

如果我错过了任何可以帮助您指导我的信息,我很乐意分享这些信息。

请注意,我正在本地开发框架,暂时不使用 github。准备好后,我会推送到github。

【问题讨论】:

    标签: php json twig composer-php slim


    【解决方案1】:

    框架包应该将它自己的代码放在一个选择的目录中(不包​​括供应商目录本身),然后将自动加载器定义指向它:​​

    /path/to/my/own/framework
     |----> composer.json
     |----> composer.lock
     |----> om
     |------> OmFramework
     |---------> Factory
     |------------> BaseController.php
     |----> vendor
             |----> slim
             |----> illuminate
             |----> twig
    

    composer.json 的“自动加载”部分很简单:

    {
      "autoload": {
          "psr-4": {
              "OmFramework\\": "om/OmFramework"
           } 
       }
    }
    

    在处理命名空间类时,首选使用 PSR-4。 PSR-0 应该用于没有命名空间的旧类。

    【讨论】:

    • 第一个解决方案不可行,因为您没有提交供应商文件夹,因此您不能将自动加载器指向那里,因为当前框架包中没有文件。正确的方法是创建一个框架包,如果项目想要使用它,它会创建一个新的composer.json 并为其添加依赖项。自动你的框架将在vendor 下,但仅适用于这个项目,而不是在开发你的框架时。 Composer 会正确调整路径。
    • @Sven 我理解并完全同意你的看法。感谢您的指导。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-02
    • 2014-12-08
    • 2012-10-23
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多