1

我有 3-4 个运行同一个 Cake 库的应用程序,每个应用程序都有自己的控制器、模型和视图。

我最近发现模型中的很多方法在项目之间重叠,我想知道是否可以让应用程序模型(不是 app_model.php)来扩展蛋糕文件中的模型

例如

app1
    controllers
    models
        model_1.php
        model_2.php
    views
app2
    controllers
    models
        model_1.php
        model_3.php
    views
cake
    controllers
    models
        model_1.php
    views

我希望这是有道理的

4

4 回答 4

1

您实际上不应该修改您的 CakePHP 应用程序以从另一个 CakePHP 应用程序读取代码。您的所有应用程序代码都应封装在该应用程序中。

如果您发现自己在多个应用程序中拥有相同的代码,这听起来像是将代码提取到 CakePHP 插件中的完美候选!

查看用于创建插件的 CakePHP 文档

插件将拥有自己的控制器、模型、视图,现在(从 CakePHP 1.3 开始)它拥有自己的资产(CSS、Js、图像等)。您可以将插件添加到您的应用程序并修改您的路由和链接,以便最终用户注意到您的应用程序没有任何差异。

Router::connect('/your/routes/*', array('plugin' => 'your_plugin', 'controller' => 'controller_in_plugin'));

echo $this->Html->link('Your Link', array('plugin' => 'your_plugin', 'controller' => 'controller_in_plugin', 'action' => 'action_in_plugins_controller'));
于 2011-09-02T05:07:21.180 回答
0

您可以尝试对常用模型使用符号链接。这样,即使目录中有多个文件,它们都共享相同的根实现。

于 2010-12-21T18:15:39.750 回答
0

如果您使用的是 CakePHP 1.3,那么您可以修改 bootstrap.php 文件:

App::build(array(
    ...
    'models' =>  array('/var/www/app1/models/', '/var/www/cake/models/'),
    ...
));

但我认为你必须以不同的方式重命名它们,即你不能在两个地方都有 model_1.php。但是你可以vehicle.php在你的 cake/models 文件夹、car.php你的 cars_app/models 文件夹和bike.php你的 bikes_app/models 文件夹中拥有扩展 Vehicle 模型的模型。

我还没有测试过,但试一试!

于 2010-12-21T16:36:36.513 回答
0

正如 RabidFire 所提到的,您首先必须指定一个额外的模型路径。然后,要从这样的模型继承,您必须在包含子模型的文件中导入相应的模型:

App::import('Model', 'ParentModel');

class ChildModel extends ParentModel {
    ...
}
于 2010-12-22T06:03:10.740 回答