1

同じ Cake ライブラリで 3 ~ 4 個のアプリを実行しています。各アプリには独自のコントローラー、モデル、およびビューがあります。

最近、モデル内のかなりの数のメソッドがプロジェクト間で重複していることがわかりました。アプリ モデル (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、Imagesなど)があります。プラグインをアプリケーションに追加し、ルーティングとリンクを変更して、エンドユーザーがアプリケーションに違いがないことに気付くようにすることができます。

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

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.phpcars_app/models フォルダーbike.php、bikes_app/models フォルダーに、Vehicle モデルを拡張するモデルを含めることができます。

私はそれをテストしていませんが、試してみてください!

于 2010-12-21T16:36:36.513 に答える
0

共通モデルのシンボリック リンクを使用してみることができます。このように、ディレクトリに複数のファイルがあっても、それらはすべて同じルート実装を共有します。

于 2010-12-21T18:15:39.750 に答える
0

RabidFire で言及されているように、最初に追加のモデル パスを指定する必要があります。次に、そのようなモデルから継承するには、子モデルを含むファイルにそれぞれのモデルをインポートする必要があります。

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

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