首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >交互插件CakePHP 2

交互插件CakePHP 2
EN

Stack Overflow用户
提问于 2012-10-20 17:58:47
回答 1查看 839关注 0票数 0

我正在开发一个基于CakePHP 2.2的2.2应用程序。我创建了一些适合主应用程序的插件。在主应用程序中,我有一个动态菜单。现在我想让插件在这个菜单中显示op。

我认为,最好的方法是让插件在主应用程序中注册它的菜单项。然后主应用程序构建菜单(使用帮助器)。但我不确定该怎么做。有没有可能让一个插件与主应用程序交互,即使它的AppController没有被触及?我想要显示所有的插件,而不仅仅是当前的插件操作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-20 18:15:22

这取决于您的实现细节。一般来说,你应该把一个插件看作是一个插件。这样你的应用程序就可以使用它了。以概念代码为例:

代码语言:javascript
复制
if(pluginAvailable('PagesPlugin')) {
  $this->set('menu', $this->PagesPluginComponent->getMenuItems());
}

您的应用程序可以依赖它,但也可以不在这里。这是插件的通用概念。在现实世界中,这要困难得多,因为你不能在没有菜单的情况下显示你的网页,这就产生了一个真正的依赖性。

插件应该是可重用的。

一些选项:

完全基于插件的页面结构

您创建了一个插件,该插件本身就包含表页面。该插件有一个加载菜单项的组件和一个支持显示菜单项的帮助器。

因此,在appcontroller中加载组件,在这里设置依赖项。在before_filer中,您加载菜单数据并将其发送到视图。

在您的default.ctp (或其他布局文件)中,您可以使用数据调用插件助手。

做一个requestAction

在插件控制器中创建一个方法并调用requestAction:http://book.cakephp.org/2.0/en/controllers.html#Controller::requestAction

所以你可以调用: yourplugin/menus/index,它会返回一个完整的MVC进程。因此,插件中的控制器从模型中获取菜单项,将数据发送到它的视图,然后在index.ctp中呈现菜单。您将在应用程序中返回HTML结果,这是完全完成的。

创建一个只有帮助器的插件

如果你想要模型中的数据,插件帮不了多少忙:如果你有一个复杂的函数,可以生成一个样式良好的菜单,你可以把它放在一个插件助手中。

在你的应用程序中,你自己在你的应用程序中加载,所以你在那里有所有的灵活性。您将其发送到视图,但您使用插件来呈现您的菜单。这样你就可以重新使用你的菜单助手,也不会有问题。

让appController扩展您的插件appController

我不喜欢它,但它是可能的:你可以在你的插件中创建一个新的AppController,它处理设置菜单和所有其他事情。然后,您的应用程序appController可以扩展该版本,而不是普通的AppController扩展控制器。所以你会得到: AppController扩展了yourPluginAppController。不过,我通常不喜欢这种模式,因为调用和依赖关系不再可见,而是真正自动添加和执行。

可选:为了获得更灵活的工作方式,CakePHP添加了新的: Events http://book.cakephp.org/2.0/en/core-libraries/events.html,这非常有趣。例如,您可以将有趣的事件放在appcontroller中,并在插件中附加侦听器。这将使您从调用这些方法的硬编码中解脱出来。因此,这可能会起作用,但它是相当新的,有一些小故障,因为它是全新的。文档还不完整,对它的验证用法也没有发布太多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12987298

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档