MVC架构下的WordPress插件开发,如何实现?

时间:2010-09-20 作者:coderex

我认为,wordpress插件架构不是MVC。所以我想在WordPress插件开发中使用/执行MVC架构(如cakephp、codeIgniter)。如何在plguin开发中使用它们。WordPress支持CakePHP或其他框架吗?

8 个回复
SO网友:Dan Gayle

你当然可以在插件开发中使用MVC理念,但如果你想在WP之外加入CI或Cake,那就太傻了。

例如,您可以使用以下伪结构构建插件(仅供参考,根据您对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中的小部件类和其他功能是相似的,尽管没有任何明确的关注点分离。

SO网友:hakre

您一次提出了多个问题:

Q: 我认为,wordpress插件架构不是MVC。

是的,没错。它不是设计模式意义上的MVC。它在更一般的视图中是MVC:模型:Mysql,视图:HTML/CSS,控制器:PHP。主前端控制器为索引。php,命令是HTTP请求。路由器是。htaccess(如果您使用相当长的permalinks)、404控制器(如果您使用该控制器)或索引。php,如果使用标准设置。

Q: 所以我想在WordPress插件开发中使用/执行MVC架构(如cakephp、codeIgniter)。如何在plguin开发中使用它们。WordPress支持CakePHP或其他框架吗?

A: 不,Wordpress不支持CakePHP或现成的CodeIgniter。您可以为codeIgniter或Cake编写适配器,以便重用现有MVC(例如,通过封装HTTP请求并从请求变量/超全局中删除斜杠)。但您也可以重写Wordpress来运行任何其他PHP框架应用程序,例如,通过向添加重写规则。htaccess和添加php文件。这取决于你想做什么。

SO网友:user310291

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

SO网友:Philip Walton

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

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

PW\\U框架的核心是一种快速简便的方法,可以创建选项页面,并完成客户端和服务器端验证。它处理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(); ?>
然后在控制器中,只需编写所有代码功能。

以下是现场使用的it工作示例:http://wordpress.org/extend/plugins/pw-archives

SO网友:Rarst

WordPress本身就是一个框架,它负责处理框架中通常包含的东西,并提供自己的(或捆绑的)代码。嗯,从技术上讲,它的一部分是BackPress 框架,但它实际上是非常内部的,不太相关。

WordPress扩展(插件或主题)使用提供的WP API检索和修改数据。对于WP来说,扩展使用什么并不重要,只要它使用适当的API与WP本身交互即可。

因此,基本上您可以在插件中包含和使用任何框架、库或任何东西。只要您正确使用WP API,并且它对性能和许可限制有意义。

SO网友:user71157

WP MVC (WordPress的MVC框架)是最好的插件。我们现在正在使用它,也许它会适合你的需要。

SO网友:kevtrout

我想你的意思是像cakePHP和codeigniter那样使用MVC,而不是“使用MVC框架”来创建插件或主题。第二个选项要求用户下载您使用的框架以及扩展文件。

SO网友:Sumit Pore

我想我来晚了,但如果有人还在寻找答案,我已经为WordPress插件开发的MVC模板工作了一段时间。此样板旨在区分模型、视图和控制器。

有了这个样板,开发人员就有机会编写个人模型、视图控制器类。此外,是否加载控制器/型号的问题委托给路由器,以便您的控制器和;模型只能关注他们应该做什么。我相信这将有助于保持较小的足迹。

这不是一个成熟的MVC框架,它只是一个样板,允许开发人员以MVC风格编写代码。正因为如此,它只有以MVC方式构建插件所需的那些特性—没有ORM—没有额外的优点—没有巨大的学习曲线。

以下是指向项目的链接:https://github.com/sumitpore/mvc-plugin-boilerplate-for-wordpress

结束

相关推荐

How do you debug plugins?

我对插件创作还很陌生,调试也很困难。我用了很多echo,它又脏又丑。我确信有更好的方法可以做到这一点,也许是一个带有调试器的IDE,我可以在其中运行整个站点,包括插件?