【问题标题】:Symfony projects: How to manage changes on bundles/librariesSymfony 项目:如何管理捆绑包/库的更改
【发布时间】:2018-05-27 21:43:53
【问题描述】:

我有一个 Symfony 项目,它使用了一个由我完成的库。问题是我为这个项目制作的这个库,但打算在未来重用它,所以它在一个单独的 git 存储库中并包含在 composer.json 中。

问题是,为了对这个库进行多次更改,我发现我自己更改了 Symfony 项目的供应商目录中的库以对其进行测试,然后复制粘贴以提交并推送到库存储库。

有什么办法可以避免这种情况并能够直接更改供应商的更改并提交到原始仓库?

我知道从任何标准来看这都不是最佳实践,但它确实适用于一个非常小的个人项目。

【问题讨论】:

  • 看起来像 git submodules 的用例
  • 但我想使用 composer 自动加载功能,而且子模块在部署过程方面并不像 composer install 那样简单

标签: php git symfony composer-php


【解决方案1】:

将 Fbeen 更改为您自己的供应商名称!

在你的 symfony 项目目录中创建一个文件夹,可以使用任何名称,例如library.

在该文件夹中创建一个目录src

src 目录中创建您的新类,例如

# library/src/MyLibrary.php

namespace Fbeen\MyLibrary;

class MyLibrary
{
    public function returnSomething()
    {
        return 'Hi Folks';
    }
}

打开您的 /web/app_dev.php 文件并添加第二行:

require __DIR__.'/../vendor/autoload.php'; // AFTER THIS LINE
require __DIR__.'/../library/src/MyLibrary.php'; // ADD THIS

现在您将能够在您的应用程序中使用该库,例如从您的控制器:

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        $lib = new \Fbeen\MyLibrary\MyLibrary();

        return $this->render('default/index.html.twig', [
            'something' => $lib->returnSomething(),
        ]);
    }
}

现在在library 目录中添加一个新的composer.json 文件:

# library/composer.json (remove this line)
{
    "name" : "fbeen/mylibrary",
    "description" : "This bundle is just a test",
    "type" : "library",
    "authors" : [{
        "name" : "Frank Beentjes",
        "email" : "xxxx@gmail.com"
    }],
    "keywords" : [
        "Test"
    ],
    "license" : [
        "MIT"
    ],
    "require" : {
         "php": ">=5.5.0"
    },
    "autoload" : {
        "psr-4" : {
            "Fbeen\\MyLibrary\\" : "src/"
        }
    }
}

在 CLI 上或使用您喜欢的 GIT 工具初始化一个新的 git repo 在library 目录中

git init
git remote add https://github.com/Fbeen/MyLibrary
git commit -m "initial commit"
git push origin master

转到packagist.org 提交您的新存储库。

在您的(下一个)项目中,使用 composer 安装 repo:

composer require fbeen/MyLibrary

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-29
    • 2018-12-31
    • 1970-01-01
    • 2012-08-21
    • 2013-09-10
    • 1970-01-01
    • 2011-02-21
    • 2015-03-12
    相关资源
    最近更新 更多