使用 public 资产为 Composer 创建 PHP 库

Creating a PHP library for Composer with public assets

我正在为客户创建模板库。该库的目标是为公司拥有的所有网站提供标准化 shell。其他开发人员应该能够使用 Composer 导入库并使用几行代码创建基本模板,例如:

$Template = new Template;
$Template->setContent('Hello world!');
$Template->render();

这将呈现标准化 shell 内的内容。这是一个简化的示例,该库提供了更多的功能,例如标准化滑块、菜单等...

这个库依赖于Twig,但也依赖于一堆前端资源;比如自定义图片、javascripts、css 和第 3 方的东西,比如 Jquery 和 Bootstrap CSS。这些资产存储在 /assets/ 文件夹中。

使用 Composer 安装库后,所有内容都存储在网站根目录中的 /vendors/ 文件夹中。但是 /assets/ 文件夹需要位于 /public_html/ 才能访问。

目前的解决方案:将/assets/ 文件夹复制到/public_html/。但我确信有更多的存储库取决于前端资产,使这些资产在 /public_html/?

中可用的最常见方法是什么

我想到的关闭的东西是 Symfony2 Bundle 系统。您定义的每个包都必须在 AppKernel 中注册。如果捆绑包包含将链接或复制到 /web/bundles/short_bundle_name/ 文件夹下的资产。

因此,为了能够跟进依赖项的资产,您需要某种注册表机制,这样您就可以注册哪些库具有需要复制/链接到 public_html 文件夹下的资产。

还可以考虑使用 assetic 来处理具有缓存破坏功能的普通资产(合并、重写和其他过滤器)。

您可以将 Composer 用于后端依赖项,将 Bower 用于前端,将 Grunt 用于移动和处理文件。

使用 Composer 将以下内容添加到 composer.json

"scripts": {
    "post-install-cmd": [
        "bower install",
        "grunt"
    ],
    "post-update-cmd": [
        "bower install",
        "grunt"
    ]
}

然后你有基本的 Bower 脚本 bowser.json

{
    "name": "my/project",
    "dependencies": {
        "jquery": "*",
        "bootstrap": "*"
    }
}

然后你有了基本的 Grunt 脚本 gruntfile.js,你可以像这样使用它 (https://github.com/gruntjs/grunt-contrib-copy)。

copy: {
  main: {
    expand: true,
    src: 'src/*',
    dest: 'dest/',
  },
},

现在您只需 运行 您的作曲家命令即可安装或更新所有文件。

注意:如果您的所有资产都在 Composer

中,则无需使用 Bower