【问题标题】:How does WP file loading work? How does it work when used in WP MVC plugin?WP文件加载如何工作?在 WP MVC 插件中使用时它是如何工作的?
【发布时间】:2018-01-18 08:08:57
【问题描述】:

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

【问题讨论】:

  • 是的,我的问题是 WP 文件加载是如何工作的?视频和附件是为了澄清问题,否则,输入所有内容会很长,我需要直观地解释它,否则问题太宽泛了。我不知道如何压缩它或使它更适合这种格式,但我知道我需要帮助来理解这个架构问题。

标签: php wordpress model-view-controller


【解决方案1】:

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 并使 [plugin app path]/controllers 下的所有文件都是必需的
  • 这意味着依赖于 WP MVC 的插件将自动需要上述指定文件夹下的任何类 [已测试]
  • 这也解释了为什么如果创建一个辅助函数,按照文档,将类放在 helper 文件夹下,但不会自动加载,并且会出现 class not found 错误(因为 helpers 没有加载/不在上面的列表中)
  • 经过仔细检查,似乎只有扩展 MvcController 的类才能加载任何帮助文件(基类 MvcController 是唯一具有 load_helper() 函数的类)。帮助文件需要命名为 xyzHelper,在 helpers 文件夹下,并且需要扩展 MvcHelper。在子控制器类中,调用$this->load_helper('xyz'),基类会自动尝试从helpers 文件夹中加载helper 类。控制器类现在将有一个名为 xyz 的帮助器对象(类名,包括下划线,没有 _helper 后缀)。现在可以通过控制器类访问帮助程序类(也在视图类中,等等。像$controller->xyz->function() 一样使用)[已测试]

如何获取以上信息:

  • 从 WP MVC 激活示例插件并导航到公共视图
  • 将断点放在mvc_file_includer.php require_file() [我实际上只是在没有任何断点的情况下运行调试器,并且在上述函数处出现了弃用函数警告。在看到这个之前我没有想过要在那个函数上设置断点,在这个实现之前我不知道在哪里设置断点]
  • 查看堆栈跟踪并尝试理解

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

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

现在,MvcLoader->init() 是如何被触发的?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多