2015-04-02 65 views
6

我有一個問題就在這裏,我有一種感覺,有一個簡單,乾淨的解決方案,我還沒有找到...... 我的蛋糕的PHP應用中是這樣的:如何在Cake-PHP-View中使用供應商文件(通過Composer安裝)?

  • Projectfolder
    • 應用
    • 廠商
    • composer.json

蛋糕-PHP和我想要使用的外部文件安裝在供應商文件夾內。 在供應商中,我有一個twitter引導包,它有一個css-和一個js文件,我想將其包含在我的視圖中,但它不可訪問,因爲這些文件不會保留在我的webroot-Folder文件夾中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" 
} 

順便說一句:作曲家忽略了引導給定的安裝路徑,由於數據包沒有類型...

+0

什麼沒有多大意義恕我直言是使用作曲家的前端依賴,你最好使用像[鮑爾](http://bower.io)的東西。 – ndm 2015-04-02 09:21:32

+0

你可能是對的,但因爲我必須使用Composer,所以我使用它並安裝2個packagemanagers對我來說似乎很奇怪... – Husky110 2015-04-02 09:35:12

+0

如果你讓我感到奇怪,別忘了composer自然是一個_PHP_依賴關係管理器,你會一直遇到非PHP包的問題,​​導致不得不使用自定義安裝程序或類似的東西。無論如何,檢查http://stackoverflow.com/q/25685722/1392379(https://github.com/RobLoach/component-installer)或http://stackoverflow.com/q/19118367/1392379 – ndm 2015-04-02 09:54:00

回答

1

使用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" 
     ] 
    }, 

一個包是資產itselfs,其它包提供了資產整合和「安裝後」處理程序。

對於蛋糕你將不得不找到執行tws/boostrap的安裝作業的軟件包 - 也許這樣的軟件包在Cake社區中。

,但我會建議使用的東西更容易,其中工程開箱:

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

然後用使CakePlugin::load('BoostCake');並添加你需要的幫手。

As @ndm指出:您也可以決定與其他資產經理(間接)合作。其中之一是https://github.com/francoispluchino/composer-asset-plugin

或者您可以直接與這些資產經理一起工作,如bower,npm。

+1

在Cake本身沒有辦法嗎? – Husky110 2015-04-02 13:27:45

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腳本調用從/src/Console/Installer.phppostInstall功能。

如果你看看這個功能,你可以看到它在安裝後會做一些事情,比如設置文件權限。

在這裏,你可以做任何事情,你需要,如建立一個函數從/vendor/文件夾中的文件複製到你的根目錄文件夾,使用標準的PHP函數,如copyrename(移動)。

相關問題