问题描述

我认为,wordpress plug-in 架构不是 MVC 。所以我想在 WordPress plug-in 开发中使用/做 MVC 架构 (像 cakephp,codeIgniter) 。如何在 plguin 开发中使用它们。 WordPress 是否支持 CakePHP 或其他框架?

最佳解决方案

你一定可以在开发一个插件时使用 MVC 的理念,但是除了 WP 之外,尝试整合 CI 或者 Cake 还是很傻的。

例如,您可以使用以下伪结构构建一个插件 (FYI,根据您对 MVC 的解释,有很多方法来构建这个插件,这只是一个简单的例子):

class Plugin(){
    function __construct(){ // controller?
        run conditionals/determine query
        process model
        process view
    }
    function model(){
        get query from database
        return variables
    }
    function view(){
        echo html
    }
}

这可能是一个可怕的插件结构示例,甚至是 MVC,但它只是为了说明 MVC architecture !== MVC frameworks 和 MVC 可以在插件设计中使用。整个 WP 中的小工具类和其他功能类似,尽管没有任何明确的分离问题。

次佳解决方案

您一次问多个问题:

问:我认为,这个 wordpress plug-in 架构并不是 MVC 。

答:是的,是的。设计模式感觉不是 MVC 。它是一个更一般的视图中的 MVC:Model:Mysql,View:HTML /CSS,Controller:PHP 。主要前端控制器是 index.php,命令是 HTTP 请求。路由器是.htaccess(如果你使用漂亮的永久链接),404 控制器 (如果你使用那个) 或 index.php,如果你使用标准的设置。

问:所以我想在 WordPress plug-in 开发中使用/做 MVC 架构 (像 cakephp,codeIgniter) 。如何在 plguin 开发中使用它们。 WordPress 是否支持 CakePHP 或其他框架?

A:不,Wordpress 不支持 CakePHP 或 CodeIgniter 开箱即用。您可以为 codeIgniter 或 Cake 编写适配器,以便您可以将 re-use 用于现有的 MVC(例如,通过封装 HTTP 请求并从请求变量/超级页面中删除斜杠) 。但是,您也可以超越 Wordpress,也可以运行任何其他 PHP 框架应用程序,例如。通过添加重写器到.htaccess 并添加 php 文件。它只取决于你想做什么

第三种解决方案

我曾经有同样的问题,目前不幸的是,在 WordPress 主题或插件中进行 MVC 的唯一方法就是自己扮演角色。

所以这就是我所做的,我已经在我的插件和主题中使用它几个月了。您可以在 github 上查看源代码:https://github.com/philipwalton/PW_Framework 它被称为 PW_Framework,它基于 Yii 框架,这是一个非常好的 PHP 的 MVC 框架。

在核心方面,PW_Framework 是一种快速简单的方法来创建完整的客户端和服务器端验证选项页面。它处理 ajax 验证以及所有 WordPress 安全问题 (如 nonce),因此您可以将开发工作集中在您的插件实际上。

所有您需要做的是使用属性,属性标签,描述和选项来定义您的模型:

public function data()
{
  return array(
    'name' => array(
      'label' => 'Name',
      'default' => '',
    ),
    'email' => array(
      'label' => 'E-mail',
      'default' => '',
    ),
    'sex' => array(
      'label' => 'Sex',
      'default' => 'male',
      'options' => array( 'm' => 'Male', 'f' => 'Female'),
    ),

  );
}

然后定义验证规则:

protected function rules() {
  return array(
    array(
      'properties' => 'name, email, sex',
      'validator'=> array('PW_Validator', 'required'),
    ),
    array(
      'properties' => 'email',
      'validator'=> array('PW_Validator', 'email')
    ),
    array(
      'properties' => 'sex',
      'validator'=> array('PW_Validator', 'match'),
      'pattern' => '/^m|f$/'
    ),
  );
}

视图看起来像这样:

<?php $form = new PW_Form( $model ); ?>
<?php $form->begin_form(); ?>
  <?php $form->begin_section('Year Options'); ?>
  <ul>
    <li><?php $form->textfield( 'name' ); ?></li>
    <li><?php $form->textfield( 'email' ); ?></li>
    <li><?php $form->radio_button_list( 'sex' ); ?></li>
  </ul>
  <?php $form->end_section(); ?>
<?php $form->end_form(); ?>

然后在控制器中,您只需编写所有的代码功能。

这是一个在实际使用中的工作示例:http://wordpress.org/extend/plugins/pw-archives

第四种方案

WordPress 的插件架构本身与 MVC 无关。但是如果你想在自己的插件中做 MVC,为什么不这样做。您没有义务使用框架,MVC 是一个可以在没有 hevay 框架的情况下实现的概念,见 http://toys.lerdorf.com/archives/38-The-no-framework-PHP-MVC-framework.html

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。