如何在Cake-PHP-View中使用供应商文件(通过Composer安装)?

时间:2015-04-02 08:14:09

标签: twitter-bootstrap cakephp composer-php

我在这里遇到了一个问题,我感觉有一个简单而干净的解决方案,我还没有找到...... 我的Cake-PHP-Application看起来像这样:

  • Projectfolder
    • 应用
    • 厂商
    • composer.json

Cake-PHP和我想要使用的外部文件安装在vendors-folder中。 在供应商中,我有一个twitter bootstrap包,它有一个css-和一个js文件,我想包含在我的视图中,但它无法访问,因为那些文件不会留在webroot-我的Cake-PHP项目的文件夹。 现在我的问题是 - 如何在Cake-PHP项目中使这两个文件都可访问,而不将它们复制到webroot文件夹?使用符号链接对我来说有点像脏黑客... 必须有一个干净的解决方案,因为否则使用Cake-PHP与Composer将没有任何意义。 我的composer.json看起来像这样:

{
"name": "MyProject",
"version": "0.0.0",
"require": {
    "php": ">=5.5.11",
    "cakephp/cakephp": "2.6.3",
    "composer/installers": "*",
    "twbs/bootstrap": "3.3.4",
    "components/jquery": "2.1.3"
},
"extra" : {
  "installer-paths":{
      "plugins/{$name}":["type:cakephp-plugin"],
      "app/webroot/bootstrap":["twbs/bootstrap"]
  }
},
"config": {
    "vendor-dir": "vendors"
}

顺便说一句:composer忽略了bootstrap的给定installpath,因为包没有类型......

2 个答案:

答案 0 :(得分:1)

使用tws/bootstrap将需要额外的步骤来安装这些资产。这通常通过符号链接或复制来完成。

例如,在向Symfony2添加Bootstrap时,您需要

 "require" : {
     "mopa/bootstrap-bundle": "dev-master",
     "twbs/bootstrap": "dev-master",
   },
    "scripts": {
        "post-install-cmd": [
            /* sensio commands **/
            "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
        ],
        "post-update-cmd": [
            /* sensio commands **/
            "Mopa\\Bundle\\BootstrapBundle\\Composer\\ScriptHandler::postInstallSymlinkTwitterBootstrap"
        ]
    },

一个包是资产本身,其他包为资产提供集成和“postInstall”处理程序。

对于 Cake ,您必须找到执行tws/boostrap安装作业的软件包 - 也许这样的软件包就在Cake社区中。

但我会建议使用更简单的东西,它开箱即用:

{
    "require": {
        "slywalker/boost_cake": "*"
    }
}

然后使用enable CakePlugin::load('BoostCake');并添加所需的帮助程序。

正如@ndm指出:您还可以决定使用Composer“桥梁”与其他资产经理(间接)。其中一个是https://github.com/francoispluchino/composer-asset-plugin

或者您可以直接与bower,npm等资产经理合作。

答案 1 :(得分:0)

composer.json中,使用scripts数组。

至少使用CakePHP 3.0,这是预构建如下:

"scripts": {
    "post-install-cmd": "App\\Console\\Installer::postInstall",
    "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
},

post-install-cmd脚本从postInstall调用/src/Console/Installer.php函数。

如果您查看该功能,您可以看到它在安装之后执行了一些操作,例如设置文件权限。

在这里,您可以使用标准PHP函数(如copy或{)构建所需的任何其他内容,例如构建将文件从/vendor/文件夹复制到webroot文件夹的函数。 {3}}(移动)。