如何在我自己的系统是供应商的情况下编写composer.json


How to write composer.json while my own system is a vendor?

我已经开始学习composer,我正在尝试构建一个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加载我的所有类,我应该在autoload部分中写些什么?如有任何指导,我们将不胜感激。

BaseController.php文件:

<?php
namespace OmFramework'Factory;
class BaseController {
        public function __construct()
        {
                //TO-DO:
        }
        public function sayHello() 
        {
                echo 'Hello World!' . "'n";
        }
}

如果我错过了任何有助于你指导我的信息,我很乐意与你分享。

请注意,我正在本地开发该框架,目前不使用github。当它准备好了,我会把它推到github。

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

/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应该用于没有命名空间的旧类。