Twitter bootstrap 如何在Cake PHP视图中使用供应商文件(通过Composer安装)?

Twitter bootstrap 如何在Cake PHP视图中使用供应商文件(通过Composer安装)?,twitter-bootstrap,cakephp,composer-php,Twitter Bootstrap,Cakephp,Composer Php,我这里有一个问题,我觉得有一个简单而干净的解决方案,我还没有找到。。。 我的Cake PHP应用程序如下所示: { "name": "MyProject", "version": "0.0.0", "require": { "php": ">=5.5.11", "cakephp/cakephp": "2.6.3", "composer/installers": "*", "twbs/bootstrap": "3.3.4", "components/j

我这里有一个问题,我觉得有一个简单而干净的解决方案,我还没有找到。。。 我的Cake PHP应用程序如下所示:

{
"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.json
Cake PHP和我想要使用的外部文件安装在vendors文件夹中。 在供应商中,我有一个twitter引导包,它有一个css和一个js文件,我想包含在我的视图中,但它是不可访问的,因为这些文件不会保留在我的Cake PHP项目的webroot文件夹中。 现在我的问题是-如何使这两个文件在我的Cake PHP项目中都可以访问,而不将它们复制到webroot文件夹?使用符号链接在我看来有点像肮脏的黑客。。。 必须有一个干净的解决方案,否则将Cake PHP与Composer一起使用将毫无意义。 My 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忽略引导的给定安装路径,因为包没有类型…

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

例如,将引导添加到Symfony2时,您需要

 "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“bridges”与其他资产管理公司合作(间接)。其中之一是


或者你也可以直接与这些资产管理公司合作,比如鲍尔、npm

composer.json
中,使用数组

至少在CakePHP 3.0中,这是预先构建的,如下所示:

"scripts": {
    "post-install-cmd": "App\\Console\\Installer::postInstall",
    "post-autoload-dump": "Cake\\Composer\\Installer\\PluginInstaller::postAutoloadDump"
},
post-install cmd
脚本从
/src/Console/Installer.php
调用
postInstall
函数

如果您查看该函数,您可以看到它在安装后正在执行一些操作,例如设置文件权限


在这里,您可以执行任何其他需要的操作,例如构建一个函数,使用标准PHP函数(如或(移动))将文件从
/vendor/
文件夹复制到webroot文件夹。

对于前端依赖项,使用composer没有多大意义,您最好使用类似的工具。您可能是对的,但由于我必须使用Composer,所以我使用它并安装了2个PackageManager,这对我来说似乎很奇怪…如果您问我,没有什么奇怪的,请不要忘了Composer天生就是一个PHP依赖关系管理器,您会一直遇到非PHP软件包的问题,导致必须使用自定义安装程序或类似程序。无论如何,检查()或者我看到了您的方法,我不认为您在默认设置上是错误的,但是必须有一个特定的解决方案来解决这个问题,因为cake php自然支持composer。如果不是这样的话,整个composer cake symbiosys将毫无意义,除了与composer一起安装cake,仅此而已。我添加的每个packagemanager都必须安装在服务器上,这对我来说很糟糕。:)除了使用自定义composer安装程序(适用于通用软件包或垫片安装程序-有什么原因不能使用此选项吗?)、复制/链接文件或使用其他依赖项管理器之外,没有其他解决方案,您可能不喜欢它,但这就是它的简单方式。蛋糕本身难道没有办法吗?