Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/12.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
Model view controller wordpress插件MVC页面结构_Model View Controller_Wordpress - Fatal编程技术网

Model view controller wordpress插件MVC页面结构

Model view controller wordpress插件MVC页面结构,model-view-controller,wordpress,Model View Controller,Wordpress,我正在开发一个wordpress插件,它占据了整个页面,并且正在计划一次旅行 该插件分散开来,包含几个模块和10多个“视图”(预订、计费、注册、我的个人资料、我的预订、我的评论等) 我有很强的OOP和MVC背景,但这个插件最初是在一个模板上创建的,所有内容都是用ajax加载的,而不是以有组织的方式:) 在wordpress中组织大型插件(半小型站点)的良好实践是什么 有没有办法为模块视图文件创建直接链接?比如: domain.com/blog/wp/plugins/my_plugin/prof

我正在开发一个wordpress插件,它占据了整个页面,并且正在计划一次旅行

该插件分散开来,包含几个模块和10多个“视图”(预订、计费、注册、我的个人资料、我的预订、我的评论等)

我有很强的OOP和MVC背景,但这个插件最初是在一个模板上创建的,所有内容都是用ajax加载的,而不是以有组织的方式:)

  • 在wordpress中组织大型插件(半小型站点)的良好实践是什么
  • 有没有办法为模块视图文件创建直接链接?比如: domain.com/blog/wp/plugins/my_plugin/profile.php
赏金
我在这里寻找有经验的人的指导方针。

首先,这不容易做到,而且随着开发的进展,更难坚持下去

我将首先尝试回答您的要点,然后尝试谈论一些我试图坚持的架构内容

  • 我尽可能把它们组织得接近正常。因此,我通常会为模型、控制器和视图创建文件夹。尽可能多地使用与编写其他应用程序相同的方式编写应用程序
  • 使用
如果您正在处理一个不会发布的项目(即,不是公开发布的插件),那么您就有了一些优势,因为您可以从Composer加载外部包,而不必担心来自其他地方的冲突。所以只要有可能,我建议把这些东西交给作曲家

我不喜欢PHP如何实现名称空间,但我非常喜欢将它们与自动加载结合使用。如果您使用某种形式的名称空间,即使它不与名称空间一起使用,也肯定会让事情变得更简单

由于WordPress是通过功能挂钩来工作的,除非你(结束?)设计了很多东西,否则你最终总是会得到一堆到处都是的挂钩。一般来说,我的建议是尝试将它们保存在一个文件中,并且永远不要在类中放置钩子,尤其是构造函数。把东西按逻辑分组

真正的诀窍是尽量减少与WordPress交互的点的数量,以及在其他任何地方都可以像平常一样编写代码,使用体面的设计模式等等。你必须有一些接触点(比如钩子之类的),你可能会发现自己对WordPress做出了一些让步,但即使在那里,你也可以通过将对象方法作为钩子回调加载,并将它们作为“正常”应用程序的起点来缓解这种情况

我对这个问题感兴趣已有一段时间了。我在这个领域有几个正在进行的项目。我做的一件事是与重力形态交互,现在开始了。这其实并不复杂,但可能有助于解释我是如何解决这个问题的

我没有什么要补充的细节了,但是如果你愿意,请随时给我写信。正如我所说,我真的对解决这个问题很感兴趣,我认为如果WordPress能像今天这样持续流行下去,我们会有更好的解决方案

我希望这是有帮助的

编辑:一个更具体的例子

我将指出我最初共享的代码中的一些内容。它有点专业化,但是您可以将这些原则用于任何基于钩子的功能。如您所见,我正在调用类
GravityFormsHooks\Loader
的方法来处理对象的挂钩。在中,我打电话来实际执行钩子。这个例子将采取一个动作或过滤器,但它是专门为Gravityforms定制的,所以YMMV

本质上,这个
GravityFormsHooks\Loader::hook()
方法所做的是实例化我们要挂接的类,并正常生成钩子

我从主插件文件调用的类是。请注意,您挂接的任何方法都必须声明为
public
。如果我们要把自己塞进MVC范例中,这里的方法就是你的控制器。从那里,你可以跳转到注入模型,模板引擎,各种各样的酷东西

正如我在最初的帖子中提到的,我试图将我与WordPress的联系保持在最低限度。我的意思不是说你应该编写API来做WordPress已经有API的事情,只是你的钩子应该集中并最小化。它确实是一种有用的关注点分离,随着应用程序的增长,它将帮助您更轻松地管理复杂性

我提供的示例作为一个钩子控制器应该可以很好地工作,只需最少的修改就可以删除一些更专业的GravityForms内容


如果您还有其他问题,请告诉我。

首先,这不容易做到,而且随着开发的进展,更难坚持下去

我将首先尝试回答您的要点,然后尝试谈论一些我试图坚持的架构内容

  • 我尽可能把它们组织得接近正常。因此,我通常会为模型、控制器和视图创建文件夹。尽可能多地使用与编写其他应用程序相同的方式编写应用程序
  • 使用
如果您正在处理一个不会发布的项目(即,不是公开发布的插件),那么您就有了一些优势,因为您可以从Composer加载外部包,而不必担心来自其他地方的冲突。所以只要有可能,我建议把这些东西交给作曲家

我不喜欢PHP如何实现名称空间,但我非常喜欢将它们与自动加载结合使用。如果您使用某种形式的名称空间,即使它不与名称空间一起使用,也肯定会让事情变得更简单

由于WordPress是通过功能挂钩来工作的,除非你(结束?)设计了很多东西,否则你最终总是会得到一堆到处都是的挂钩。一般来说,m