在GitHub上托管Symfony2bundle,并使用Composer安装它



Background

我创建了一个托管在GitHub上的Symfony2应用程序。现在我想把它变成一个捆绑包而不是一个应用程序,以便与 Composer 一起使用。

我尝试过什么

我在GitHub上创建了一个名为AsyncTweetsBundle的新存储库,我认为我的供应商名称应该AlexisLefebvre并且捆绑名称AsyncTweetsBundle。但是我不明白如何配置composer.json文件,这是文件的当前内容:

{
    "name" : "alexislefebvre/async-tweets-bundle",
    "type" : "symfony-bundle",
    "description" : "PHP Twitter reader for asynchronous reading",
    "keywords" : ["twitter", "reader", "bundle"],
    "homepage": "http://asynctweets.alexislefebvre.com/",
    "license" : "MIT",
    "authors" : [{
        "name" : "Alexis Lefebvre",
        "homepage": "http://alexislefebvre.com/",
        "role": "Developer"
    }],
    "require" : {
        "php": ">=5.3.2",
        "abraham/twitteroauth": "0.5.0"
    },
    "autoload" : {
        "psr-0" : {
            "AlexisLefebvre\Bundle\AsyncTweetsBundle" : ""
        }
    },
    "target-dir": "AlexisLefebvre/Bundle/AsyncTweetsBundle",
    "extra": {
        "branch-alias": {
            "dev-master": "0.1-dev"
        }
    }
}

这是捆绑包 AlexisLefebvreAsyncTweetsBundle 的基类:

<?php
namespace AlexisLefebvreBundleAlexisLefebvreAsyncTweetsBundle;
use SymfonyComponentHttpKernelBundleBundle;
class AlexisLefebvreAsyncTweetsBundle extends Bundle
{
}

我已经在Packagist上提交了这个包:alexislefebvre/async-tweets-bundle。

所以我创建了一个 Symfony2 安装并添加了这个依赖项:

composer create-project 
symfony/framework-standard-edition symfony2_AsyncTweetBundle --prefer-dist
cd symfony2_AsyncTweetBundle/
composer require alexislefebvre/async-tweets-bundle

捆绑包安装在vendor/alexislefebvre/async-tweets-bundle/AlexisLefebvre/Bundle/AsyncTweetsBundle/AlexisLefebvreAsyncTweetsBundle.php但我无法使用它。

问题

捆绑包安装在 vendor/alexislefebvre/async-tweets-bundle/AlexisLefebvre/Bundle/AsyncTweetsBundle/AlexisLefebvreAsyncTweetsBundle.php 中。正确吗?

我在应用程序/应用程序内核中添加了new AlexisLefebvreBundleAlexisLefebvreAsyncTweetsBundle().php但是如果我运行命令,例如。 php app/console cache:clear --env=dev,它会抛出一个错误:

PHP 致命错误:类 'AlexisLefebvre\Bundle\AlexisLefebvreAsyncTweetsBundle' 在第 20 行的 .../symfony2_AsyncTweetBundle/app/AppKernel.php 中找不到

捆绑包的正确名称是什么?命名空间在捆绑包的类名中AlexisLefebvre必需的吗?我应该使用 AlexisLefebvre 还是 AlexisLefebvreBundle 作为基本命名空间?"target-dir"的正确值是多少.我没有找到任何关于 composer.json 文件不同部分之间链接的解释:"name""autoload" : {"psr-0" : {}}"target-dir"

我尝试使用"autoload" : {"psr-4" : {...}}psr-0新项目已弃用),更糟糕的是,捆绑包根本没有安装。

查看您的packagist存储库和github存储库。包旁的存储库点似乎没有文件。因此,首先尝试在这两个位置合并文件。

然后,如果您想更改供应商名称/命名空间,请为每个文件更改命名空间以确保统一,并且您已经知道如何创建自己的包。

您仍然可以查看创建自己的作曲家包万一出现混淆。

下面是 Cerad 命名空间下 PersonBundle 的工作示例。

{
"name":        "cerad/person-bundle",
"type":        "symfony-bundle",
"description": "Symfony Cerad Person Bundle",
"keywords":    ["cerad","zayso"],
"homepage":    "http://github.com/cerad/PersonBundle",
"license":     "MIT",
"authors": [
    {
        "name": "",
        "email": "",
        "homepage": "http://zayso.org",
        "role": "Developer"
    }
],
"require": {
    "php": ">=5.3.3"
},
"minimum-stability": "dev",
"autoload": {
    "psr-0": { "Cerad\Bundle\PersonBundle\": "" }
},
"target-dir": "Cerad/Bundle/PersonBundle"
}

代码安装在vendor\cerad\person-bundle\Cerad\Bundle\PersonBundle

我有一个 CeradPersonBundle.php 文件命名空间为 Cerad\Bundle\PersonBundle;

所有的路径和选项都令人困惑。 我通过让作曲家直接从 github 而不是 packagist 首先加载来解决这个问题。 这样更容易对 composer.json 进行更改。

解决方案是在 composer.json 中使用 psr-4

{
    "name" : "alexislefebvre/async-tweets-bundle",
    "type" : "symfony-bundle",
    "description" : "PHP Twitter reader for asynchronous reading",
    "keywords" : ["twitter", "reader", "bundle"],
    [...]
    "autoload" : {
        "psr-4" : {
            "AlexisLefebvre\Bundle\AsyncTweetsBundle\" : ""
        }
    }
}

下面是基础捆绑包类:

<?php
namespace AlexisLefebvreBundleAsyncTweetsBundle;
use SymfonyComponentHttpKernelBundleBundle;
class AsyncTweetsBundle extends Bundle
{
}

我能够通过将其添加到app/AppKernel.php来加载Symfony2中的捆绑包:

new AlexisLefebvreBundleAsyncTweetsBundleAsyncTweetsBundle(),

相关内容

  • 没有找到相关文章