2015-04-02 19 views
6

Ho un problema qui, che ho avuto la sensazione di una soluzione semplice e pulito, che non ho ancora trovato ... mia torta-PHP-Application assomiglia a questo:Come utilizzare un file venditore (installato tramite Composer) in un Cake-PHP-View?

  • Projectfolder
    • app
    • fornitori
    • composer.json

Cake-PHP e il file esterno che voglio usare sono installati all'interno della cartella dei venditori. Nei fornitori ho un pacchetto per twitter bootstrap, che ha un css- e un js-file che voglio includere nella mia vista, ma non è accessibile, dal momento che quei file non rimangono all'interno della webroot-Folder della mia Progetto Cake-PHP. Ora la mia domanda è: come posso rendere accessibili entrambi i file all'interno del mio progetto Cake-PHP, SENZA copiarli nella cartella webroot? L'utilizzo dei collegamenti simbolici mi sembra un po 'sporco ... Deve esserci una soluzione pulita, poiché altrimenti l'uso di Cake-PHP con Composer non avrebbe senso. mio composer.json si presenta così:

{ 
"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" 
} 

Btw: compositore ignora l'installpath data per bootstrap, dal momento che il pacchetto non ha alcun tipo ...

+0

Ciò che non ha molto senso IMHO è usare il compositore per le dipendenze frontend, è meglio usare qualcosa come [bower] (http://bower.io). – ndm

+0

Potresti aver ragione, ma visto che devo usare Composer, lo uso e l'installazione di 2 packagemanagers mi sembra strano ... – Husky110

+0

Non c'è niente di strano se mi chiedi, non dimenticare che il compositore è naturalmente un gestore di dipendenze _PHP_ , ti imbatterai in problemi con pacchetti diversi da PHP tutto il tempo, risultando dover utilizzare programmi di installazione personalizzati o simili. In ogni caso, controlla http://stackoverflow.com/q/25685722/1392379 (https://github.com/RobLoach/component-installer) o http://stackoverflow.com/q/19118367/1392379 – ndm

risposta

1

Utilizzando tws/bootstrap richiederà un ulteriore passo per l'installazione di queste attività. Questo è spesso fatto tramite collegamento simbolico o copia.

Per esempio, quando si aggiungono Bootstrap per Symfony2 si richiederebbe

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

Una confezione è l'itselfs patrimoniali, gli altri pacchetti fornisce l'integrazione e il gestore "successivo all'installazione" per l'attività.

Per Cake si dovrebbe trovare il pacchetto facendo il lavoro di installazione per tws/boostrap - forse un tale pacchetto è in giro nella comunità Cake.

Ma io suggerirei di usare qualcosa di più facile, che funziona out of the box:

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

E poi usare abilitare CakePlugin::load('BoostCake'); e aggiungere gli aiutanti necessari.

Come ha sottolineato @ndm: si potrebbe anche decidere di lavorare con i "ponti" di Composer con altri gestori di risorse (indiretto). Uno di questi è https://github.com/francoispluchino/composer-asset-plugin

Oppure si potrebbe lavorare direttamente con questi gestori patrimoniali, come bower, npm.

+1

non c'è un modo in Cake in sé? – Husky110

0

Nel proprio composer.json, utilizzare l'array scripts.

Con CakePHP 3.0, almeno, questo è pre-costruito come segue:

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

Lo script post-install-cmd chiama la funzione postInstall da /src/Console/Installer.php.

Se si osserva questa funzione, è possibile vedere che sta eseguendo alcune operazioni dopo l'installazione, ad esempio l'impostazione dei permessi dei file.

E qui, si può fare qualsiasi altra cosa che si richiede, come la costruzione di una funzione per copiare i file dalla cartella /vendor/, alla cartella di Webroot, utilizzando le funzioni standard di PHP come copy o rename (per spostare).

Problemi correlati