問題描述

我認為,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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。