WP文件加载如何工作?在WP MVC插件中使用它时如何工作?

时间:2018-01-18 08:08:57

标签: php wordpress model-view-controller

我创建了一个关于我遇到的一个主要问题的视频。我需要了解文件加载架构,在WP插件开发中编写类时如何完成(一个类如何知道另一个类的存在),以及它与WP MVC文件加载架构的比较。这是一个很大的问题,我经历了各种较小的问题,这些问题帮助我在下面的驱动链接中的视频中找到了问题摘要。我也将插件代码放在Google云端硬盘文件夹中:https://drive.google.com/open?id=1JVSSlkSJ5pCfNojRh6jen3ax2w-HZr5d

1 个答案:

答案 0 :(得分:0)

WP方面:

  • plugin.php有这一行:$wp_filter[ $tag ]->do_action( $args );
  • $ tag =' init'
  • 这会调用WP_Hook->do_action,然后调用WP_Hook->apply_filters

WP MVC方:

  • 然后调用MvcLoader->init,然后调用所需的load_ controllers / libs / models / settings / functions (只加载粗体文件夹名下的文件)
  • load_controllers将使用file_includer并使[插件应用程序路径] /控制器下的所有文件都是必需的
  • 这意味着上面指定文件夹下的任何类都将依赖于WP MVC [已测试]的插件自动需要
  • 这也解释了为什么如果一个人创建一个帮助函数,按照文档,一个人会将该类放在帮助文件夹下,但这不会自动加载,一个将得到类找不到错误(因为帮助者没有& #39; t加载/不在上面的列表中)
  • 仔细观察后,看起来只有扩展MvcController的类才能加载任何帮助文件(基类MvcController是唯一具有load_helper()函数的类)。辅助文件需要在helpers文件夹下命名为xyzHelper,并且需要扩展MvcHelper。在子控制器类中,调用$this->load_helper('xyz'),基类将自动尝试从helpers文件夹加载帮助程序类。控制器类现在将有一个名为xyz的辅助对象(类名,包括下划线,没有_helper后缀)。现在可以通过控制器类访问辅助类(在视图类中也是如此。使用类似于$controller->xyz->function())[已测试]

如何获取以上信息:

  • 从WP MVC激活示例插件并导航到公共视图
  • 将断点放在mvc_file_includer.php中require_file()[我实际上只运行没有任何断点的调试器,并且在上面的函数中有一个不推荐使用的函数警告。我没想到在看到这个之前在该功能上设置一个断点,我也不知道在这个实现之前放置断点的位置]
  • 查看堆栈跟踪并尝试理解

此外,在WP MVC中,还有其他调用将自动包含文件

一个例子是render_view() - 这将调用控制器,或者帮助器,render_view(),它将使用file_includer来查找所需的文件路径,并调用{ {1}}在该文件路径上。因此,更像是动态加载正在使用的文件。

现在,require是如何被触发的?

在主插件的文件:wp_mvc.php中,根据它是否在管理/公共功能视图中,使用所需参数调用wp_mvc_load_global_functionality。该函数中的一个操作是MvcLoader->init(),它触发MvcAdminLoader的init挂钩,它是MvcLoader的子节点[通过注释掉add_action进行测试,它不再有效]