Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
交互式插件CakePHP 2_Php_Cakephp 2.0 - Fatal编程技术网

交互式插件CakePHP 2

交互式插件CakePHP 2,php,cakephp-2.0,Php,Cakephp 2.0,我正在开发一个基于CakePHP2.2的网络应用程序。我创建了一些适合主应用程序的插件。在主应用程序中,我有一个动态菜单。现在我想插件显示在这个菜单op 我认为,最好的方法是让插件在主应用程序中注册它的菜单项。然后主应用程序构建菜单(使用助手)。但我不知道该怎么做。是否可以让插件与主应用程序交互,即使它的AppController没有被触动?我想显示所有插件,而不仅仅是当前的插件操作。这取决于您的实现细节。一般来说,你应该把插件看作真正的插件。因此,如果可用,您的应用程序可以使用它。例如,概念代

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


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

这取决于您的实现细节。一般来说,你应该把插件看作真正的插件。因此,如果可用,您的应用程序可以使用它。例如,概念代码:

if(pluginAvailable('PagesPlugin')) {
  $this->set('menu', $this->PagesPluginComponent->getMenuItems());
}
您的应用程序可以依赖它,但它也可以不在这里。这是插件的一般概念。在现实世界中,这要困难得多,因为你不能在没有菜单的情况下显示你的网页,这样就产生了一种真正的依赖性

插件应该是可重用的

一些选择:

完全基于插件的页面结构 您创建了一个插件,该插件本身具有表页。插件有一个加载菜单项的组件和一个支持显示菜单项的助手

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

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

执行请求操作 在插件控制器中创建一个方法并调用requestAction:

因此,您可以调用:yourplugin/menus/index,它将返回完整的MVC过程。因此,插件中的控制器从模型中获取菜单项,将数据发送到其视图,并在index.ctp中呈现菜单。您将在应用程序中完全返回HTML结果

创建一个只包含一个助手的插件 如果你想要模型中的数据,插件帮不了什么忙,但是:如果你有一个复杂的函数,可以生成一个样式良好的菜单,你可以把它放在插件助手中

在您的应用程序中,您自己在应用程序中进行加载,因此您具有所有的灵活性。您将其发送到视图,但使用插件呈现菜单。这样,您也可以重复使用菜单帮助程序而不会出现问题

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

可选:为了更灵活地工作,CakePHP添加了新的:Events,这非常有趣。例如,您可以在appcontroller中放置有趣的事件,并将侦听器附加到插件中。这样可以避免硬代码调用这些方法。所以这可能是可行的,但它是全新的,有一些小故障,因为它是全新的。文档还不完整,证明它的使用还没有发布太多