0

問題を表現するのに苦労しているので、答えを探すのは大変でした。うまくいけば、あなたは助ける方法を知っているでしょう。

私は一連の独自のモデルと相互作用するCakePHP2.1プラグインを作成しています:-友達-グループ-ユーザー

フレンドとグループはプラグイン用に特別に作成されたモデルであり、プラグイン内で通常どおり機能します。ただし、ユーザーモデルは、実際には親アプリの他のテーブルの単なるエイリアスです。

したがって、「MyAwesomeApplication」が「MyAwesomePlugin」を使用することを決定した場合、独自の「users」テーブルが必要になります(他の何かと呼ばれる場合もあります)。「MyAwesomeApplication」にMyUserというモデルがあるとします。「MyAwesomePlugin」は、内部ユーザーモデルに$ useTable="my_users"を動的に通知したいと考えています。

私の質問は、そのデータをプラグインに渡すにはどうすればよいですか?ユーザーが$useTable"my_users"を使用する必要があることを理解するために、 "MyAwesomePlugin"を構成するにはどうすればよいですか。

4

2 に答える 2

2

私が理解しているように、プラグインのモデルで、通常はアプリケーションのモデルに属するテーブルを使用する必要があります-慣例による。静的に設定してみましたか:

public $useTable = "my_users";

プラグインで?すべてのプラグインは通常、Cake の起動時に初期化されるため、すべての設定をロードする必要があります。なぜこれが必要なのですか - それは本当にあなたをたくさん制限しますか? プラグイン モデルで使用されているテーブルはランタイムを変更しますか?

このModelクラスには、役立つと思われる便利な機能もいくつかあります。

$this->User->table;

モデルのテーブル名 - 現在使用されているテーブル ** を保持します。

また、モデルのソーステーブル (コントローラー内) を次のように設定できます。

$this->User->setSource('table_name);

** を使用する場合にこれが当てはまるかどうかはわかりませんModel::setSource()。通話$this->User->table;後に何が保持されるかを確認するのは興味深いでしょう。Model::setSource()

于 2012-06-23T04:42:05.447 に答える
0

これを達成する方法を見つけましたが、すべての人のすべてのシナリオで機能するとは限りません。

プラグインでコンポーネントを作成し、コントローラーでコンポーネントを呼び出します。コンポーネントを介してユーザー モデルの名前を渡します。このようにして、ユーザー モデルに関する情報を取得し、それをプラグインで使用するプラグインの useTable として設定できます。

もちろん、この方法ではコンポーネントを使用してプラグインを利用することしかできませんが、おそらくそれが最善の方法です。

これが私がそれをした方法の例です:

// in the AppController
public $components = array(
'MyPlugin.MyPluginComponent' => array('userModel'=>'UserModelName')
);

// in the Plugin's Component
class MyPluginComponent extends Component {

function initialize($controller) {

    //get the base user model
    $this->UserModel = ClassRegistry::init($this->settings['userModel']);

    //set the useTable for our plugin's user model
    $this->PluginUser = ClassRegistry::init('MyPlugin.PluginUser');
    //set the useTable value for this model
    $this->PleaseUser->setSource($this->UserModel->useTable);
}

それは私にはうまくいくようです。これが他の誰かに役立つことを願っています。

于 2012-06-23T04:34:20.760 に答える