我在解决问题时遇到了问题,因此很难找到答案。希望你知道如何提供帮助。
我正在创建一个CakePHP 2.1插件,它将与一系列自己的模型进行交互: - 朋友 - 集团 - 用户
Friend and Group是专门为插件创建的模型,它们通常在插件中运行。但是,User模型实际上只是父应用程序中其他表的别名。
所以,如果"我的真棒申请"决定使用" My Awesome Plugin",它必须拥有自己的"用户"表(虽然它可能称为其他东西)。让我们说“我的真棒应用程序”#34;有一个名为MyUser的模型。 "我的真棒插件"想要动态地将其内部用户模型告诉$ useTable =" my_users"。
我的问题是,如何将该数据传递给插件?如何配置" My Awesome Plugin"要明白用户应该$ useTable" my_users&#34 ;;
答案 0 :(得分:2)
据我了解,您希望PlugIn中的模型使用通常属于您的应用程序中的模型的表 - 按惯例。您是否尝试过静态设置:
public $useTable = "my_users";
插件中的?所有插件通常在Cake启动时初始化,因此应该加载所有配置。为什么你需要这个 - 它确实限制了你很多?插件模型使用的表是否会改变运行时?
Model
课程也有一些你可能会觉得有用的好东西:
$this->User->table;
保存模型的表名 - 当前正在使用的表为**。
您还可以使用以下命令为模型(在Controller内)设置源表:
$这 - >用户 - >的SetSource('表名);
**当您使用Model::setSource()
时,我不确定这是否适用。在$this->User->table;
来电之后查看Model::setSource()
包含的内容会很有趣。
答案 1 :(得分:0)
我已经找到了实现这一目标的方法,但它可能并不适用于所有人的所有场景。
我在插件中创建了一个Component,然后在Controller中调用了Component。我通过组件传递用户Model的名称。这样,我可以获得有关用户模型的信息,我可以将其设置为我的插件的useTable,以便在插件中使用。
当然,这种方法限制我使用Component来使用插件,但这可能是最好的。
以下是我如何做到的一个例子:
// 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);
}
这似乎对我有用。希望这有助于其他人。