在外部PHP代码中使用Cakephp类

时间:2014-04-22 16:38:59

标签: php cakephp cakephp-2.0 cakephp-2.1 cakephp-2.2

我想使用与cakephp无关的常规php代码中的Cakephp类(模型)。

我尝试了这个,但它没有工作:

include('/lib/Cake/Core/App.php');
App::uses('Business', 'Model');
$b = new Business();

最后一行给了我一个错误,我也尝试了几个解决方法但没有成功...

我将永远感激一个好的答案:)

编辑:这是我找到的解决方案! (谢谢,@ Burzum!):

将webroot / index.php复制到webroot / cake_setup.php并删除最后几行所以它只包含内容而不是实际执行任何内容:

App::uses('Dispatcher', 'Routing');

$Dispatcher = new Dispatcher();
$Dispatcher->dispatch(
    new CakeRequest(),
    new CakeResponse()
);

然后,这工作来自外部PHP代码:

if (!defined('DS')) {
    define('DS', DIRECTORY_SEPARATOR);
}

include_once(__DIR__ . DS . '..' . DS . 'v2' . DS . 'app' . DS . 'webroot' . DS . 'cake_setup.php');
App::uses('AppModel', 'Model');
App::uses('Business', 'Model');

$b = new Business();

非常感谢你们!

1 个答案:

答案 0 :(得分:2)

CakePHP不是一块一块地使用的。如果您正在寻找独立的ORM,那就去学说或推动。

您可以继续尝试但是您必须运行框架的引导过程(请参阅webroot / index.php中的内容)并注册它的类加载器并将其指向核心包括路径。

修改

今天再看一遍,我认为这里适当的解决方案是通过另一个非Cake应用程序可以使用的API从CakePHP应用程序中公开您需要的东西。使用CakePHP,REST非常简单,您可能希望查看该解决方案。你不会在CakePHP应用程序上紧密结合你的其他应用程序。您甚至可以升级到3.0,而无需触及其他非Cake应用程序。