【问题标题】:Dynamically passing a model name to a CakePHP Plugin将模型名称动态传递给 CakePHP 插件
【发布时间】:2012-06-22 10:45:41
【问题描述】:

我在表述我的问题时遇到了困难,因此很难找到答案。希望您知道如何提供帮助。

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

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

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

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

【问题讨论】:

    标签: cakephp cakephp-2.1 cakephp-model


    【解决方案1】:

    据我了解,您希望插件中的模型使用通常属于您的应用程序中的模型的表 - 按照约定。你试过静态设置吗:

    public $useTable = "my_users";
    

    在插件中?所有插件通常在 Cake 启动时被初始化,所以所有的配置都应该在那时被加载。你为什么需要这个——它确实限制了你很多?插件模型正在使用的表是否会更改运行时?

    Model 类还有一些你可能会觉得有用的好东西:

    $this->User->table;
    

    保存模型的表名 - 当前正在使用的表是**。

    您还可以使用以下方法为模型(在控制器内)设置源表:

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

    ** 我不确定这是否适用于您使用Model::setSource()。在Model::setSource() 调用之后查看$this->User->table; 的内容会很有趣。

    【讨论】:

    • 谢谢。我最终找到了 Model->setSource() 功能,并将它与我的其他答案(如下)结合起来,我能够让它工作。问题是如何从插件外部为插件内的模型设置表。感谢您的帮助。
    【解决方案2】:

    我想出了一种方法来实现这一点,但它可能不适用于所有人的所有场景。

    我在我的插件中创建了一个组件,然后我在我的控制器中调用了该组件。我通过组件传递用户模型的名称。这样,我可以获取有关用户模型的信息,并且可以将其设置为我的插件的 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);
    }
    

    这似乎对我有用。希望这对其他人有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-02
      • 2014-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多