我创建了一个Symfony2 application hosted on GitHub。现在我想把它变成一个bundle而不是一个应用程序,以便与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 AlexisLefebvre\Bundle\AlexisLefebvreAsyncTweetsBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
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
中。这是对的吗?
我在 app / AppKernel.php 中添加了new AlexisLefebvre\Bundle\AlexisLefebvreAsyncTweetsBundle()
但是如果我运行命令,例如。 php app/console cache:clear --env=dev
,它会抛出错误:
PHP致命错误:Class&#39; AlexisLefebvre \ Bundle \ AlexisLefebvreAsyncTweetsBundle&#39;在第20行的/ symfony2_AsyncTweetBundle / app / AppKernel.php中找不到
捆绑包的正确名称是什么?命名空间AlexisLefebvre
是否必须在包的类名中?我应该使用AlexisLefebvre
还是AlexisLefebvre\Bundle
作为基本命名空间? "target-dir"
的正确值是多少?我没有找到 composer.json 文件不同部分之间链接的任何解释:"name"
,"autoload" : {"psr-0" : {}}
和"target-dir"
。
我尝试使用"autoload" : {"psr-4" : {...}}
(psr-0
已弃用新的项目)而且更糟糕的是,捆绑包根本没有安装。
答案 0 :(得分:1)
以下是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"
}
代码安装在 供应商\ CERAD \人束\ CERAD \捆绑\ PersonBundle
我有一个CeradPersonBundle.php文件 使用Cerad \ Bundle \ PersonBundle的命名空间;
所有路径和选项都令人困惑。我通过让作曲家首先直接从github而不是packagist加载来完成它。更容易以这种方式对composer.json进行更改。
答案 1 :(得分:1)
查看您的packagist repository和github repository。看来您的包的存储库点没有文件。因此,首先尝试在这两个位置合并您的文件。
然后,如果您想为每个文件更改供应商名称/命名空间更改命名空间以保持一致性,并且您已经知道如何创建自己的包。
你仍然可以看看Creating your very own Composer Package 在混淆的情况下。
答案 2 :(得分:0)
解决方案是在 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 AlexisLefebvre\Bundle\AsyncTweetsBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class AsyncTweetsBundle extends Bundle
{
}
我可以通过将它添加到 app / AppKernel.php 来加载Symfony2中的包:
new AlexisLefebvre\Bundle\AsyncTweetsBundle\AsyncTweetsBundle(),