0

我很难用措辞来表达我的问题,所以很难找到答案。希望你会知道如何提供帮助。

我正在创建一个 CakePHP 2.1 插件,它将与一系列自己的模型进行交互: - 朋友 - 组 - 用户

Friend 和 Group 是专门为插件创建的模型,它们在插件中正常运行。但是,User 模型实际上只是父应用程序中某个其他表的别名。

因此,如果“我的真棒应用程序”决定使用“我的真棒插件”,它必须有自己的“用户”表(尽管它可能会调用其他东西)。假设“My Awesome Application”有一个名为 MyUser 的模型。“My Awesome Plugin”想要动态地告诉它的内部用户模型 $useTable = “my_users”。

我的问题是,如何将这些数据传递给插件?如何配置“我的真棒插件”以了解用户应该 $useTable "my_users";

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 回答