2015-03-30 62 views
0
  • 我在CakePHP 2.6.3中有一個位於PluginName/Console/Command/FooShell.php的shell。
  • 我已經在我的應用程序的bootstrap.php中通過加載了此插件。
  • 當該插件在ROOT/app_name/Plugin,我運行PluginName.foo,殼工程
  • 當該插件是ROOT/plugins我運行相同的命令,我得到一個錯誤

命令:如何在CakePHP 2中運行全局插件的shell?

C:\xampp\htdocs\site_name\app_name>php Console/cake.php -app app_name PluginName.foo 

錯誤:

Warning Error: include(C:\xampp\htdocs\site_name\app_name\Plugin\PluginName\Console\Command\FooShell.php): failed to open stream: No such file or directory in [C:\xampp\htdocs\site_name\lib\Cake\Core\App.php, line 547] 

    Warning Error: include(): Failed opening 'C:\xampp\htdocs\site_name\app_name\Plugin\PluginName\Console\Command\FooShell.php' for inclusion (include_path='C:\xampp\htdocs\site_name\lib;.;C:\xampp\php\PEAR') in [C:\xampp\htdocs\site_name\lib\Cake\Core\App.php, line 547] 

    Error: Shell class FooShell could not be found. 
    #0 C:\xampp\htdocs\site_name\lib\Cake\Console\ShellDispatcher.php(200): ShellDispatcher->_getShell('PluginName.back...') 
    #1 C:\xampp\htdocs\site_name\lib\Cake\Console\ShellDispatcher.php(66): ShellDispatcher->dispatch() 
    #2 C:\xampp\htdocs\site_name\app_name\Console\cake.php(33): ShellDispatcher::run(Array) 
    #3 {main} 

出於某種原因,CakePHP很適合這個插件在ROOT/plugins當它提供實際的網頁時,但在控制檯中引發錯誤。在shell docsplugin docs

沒有明確地說,有什麼關於ROOT/plugins使用插件不同,但該目錄是如何使用的討論是從插件和folder structure docs顯眼。 (我假設,因爲這意味着你應該以同樣的方式實現插件,而不管他們在哪個目錄中。)

我在做這個錯誤嗎?

回答

1

當它在ROOT/plugins目錄,你需要加載它像這樣在ROOT/lib/Cake/bootstrap.php

App::build(array('Plugin' => array(CAKE . DS . 'plugins' . DS))); 
CakePlugin::load('<plugin-name>'); 
+1

這奏效了,在那個噁心的感覺,當你修改核心文件,你得到的費用。謝謝! – 2015-03-31 21:40:39

+0

你應該也可以在'ROOT/app_name/Config/bootstrap.php'中做同樣的事情,它是你的應用程序的一部分,而不是Cake核心。這是最早加載的文件之一,所以只要你的'App :: build()'聲明在你的'CakePlugin :: load()'之前,它應該可以正常工作。 – beporter 2015-04-08 15:23:24