0

私はCakePHP 2.3の高度なインストールを作成しています(ケーキのすべてのコアファイルが配置されている1つの同じlibフォルダーを共有するいくつかのアプリ-ウェブサイト-)。これは問題なく動作します。各アプリの Config フォルダーにあるcore.phpファイルを編集して、cake のファイルの場所を認識できるようにします。ファイルシステムは次のようになります。

[root]
    [cake-core-files]
    [websites]
        [website-1]
            [app]
            [plugins]
            [vendors]
        [website-2]
        ...
        [website-N]

これらの異なるアプリは、実際にはいくつかの点で異なります (それらは異なる Web サイトです) が、同時に、それらすべてに共通する多くのことがあります (たとえば、一部のモデル、コントローラー、機能など)。私がやりたいのは、可能であれば、これらのアプリで多数のコントローラーやモデルなどを共有して、アプリごとに複製するのではなく、1 か所に配置できるようにすることです。

私は CakePHP のベンダープラグインの概念を見てきました(私は実際にこれらの Web サイトでプラグインを使用していますが、/app/plugins フォルダーから)、それが私の場合に機能するかどうか、またはどのように設定するかはわかりませんそれまで。[cake-core-files] と [websites] の同じレベルに別のフォルダー ([shared_objects] など) を作成するというアイデアがあると思いますが、そのために Cake をどのように構成する必要があるかわかりません。または、各アプリからそれらのオブジェクトを呼び出す方法。

何か案は?

編集

以下のコメント/応答に基づいて、bootstrap.php の App:build() 関数を使用してこれを実行しようとしていますが、機能させることができません。これは私がやったことです:

  1. すべてのアプリ間で共有するものを配置する新しいフォルダーを追加しました。

    [root] [cake-core-files] [shared-stuff] --> NEW FOLDER [Model] [Config] [websites] [website-1] など...

  2. モデルUser.phpを新しいフォルダー[shared-stuff/Model]内に配置しました

  3. ブートストラップに次の行を追加しました。

    App::build(array('Model' => array('/path/to/shared-stuff/Model')));
    
  4. モデルUser.phpを元の場所[website-1/app/Model]から削除しました

この手順の後、動作しているように見え、モデル User.php が[shared-stuff]フォルダーから正しく読み込まれます (私はApp::objects('Model'); の印刷をテストしました。ユーザー モデルがリストされています)。ただし、実際には機能しません.login()関数でUsersControllerからそのモデルを呼び出すと、ログインは機能しません(ただし、デバッグが2に設定されていても、エラーは発生しません)。

このモデルは、デフォルトのデータベース構成とは異なるデータベース構成を使用します ( usersテーブルは、デフォルトのデータベースとは異なるデータベースにあります)。これが重要かどうかはわかりません。

確かなことは、元の場所 ( [website-1/app/Model] ) にまったく同じ User.php モデルを残すと、ログインを含めてすべて正常に動作するため、設定方法に問題があることです。モデル自体ではなく、これらすべての共有のものです。

私が間違っていることは何ですか?

4

2 に答える 2

3

複数の Web サイト間でコントローラー/モデルを共有し、プラグインなしで実行すると便利だと思います。共有コントローラー/モデルを使用すると、必要に応じて上書きできます。コントローラー/モデルを Web サイトの正しいフォルダーにコピーするだけで発生するはずであり、システムは共有フォルダーの代わりにそれを使用する必要があります!

編集:素晴らしい、それは動作しますが、ケーキの公式ドキュメントに少し誤りがあると思います:すべてのパスはディレクトリ区切り記号で終了する必要があります! Cakephp の本には、末尾のスラッシュがありません。これを App::build パスに追加すると、すべてが完全に機能します!

于 2013-02-03T20:35:39.467 に答える
0

コアのPlugins/dirにプラグインを含めることができます

[root]
    [lib]
        [Cake]
    [Plugins]
        [Available]
        [To]
        [All]
    [website-1] // the 'app' dir -> https://github.com/cakephp/cakephp/tree/master/app
        [plugins]
        [vendors]
    [website-2] // you can have many of them named anything, 'app' is just one.
        ...
    [website-N]

このフォルダは特に、ケーキライブラリを使用するすべてのアプリでプラグインを利用できるようにします

例えば:

これを見てください。にコピーappwebsite-1、まで繰り返しwebsite-nます。

于 2013-01-04T01:54:06.610 に答える