2010-09-30 79 views
0

我想要一個嚮導,在其中插入數據庫連接,並使用一些設置生成PHP類。該向導可以使用(內部)已經創建的模板。Netbeans嚮導生成php類

這是可行嗎?這是否已經存在?如果沒有,如何做到這一點的任何想法?

謝謝!

編輯

我在尋找的東西至極讓我做我自己的類模板或設置。

+0

像'msqli'或'pdo'或'pear'這樣已有的實現有什麼問題? – 2010-09-30 14:51:14

回答

3

NetBeans岩石!

NetBeans具有強大的MySql支持,但是,沒有本地工具可以從表中生成類。

有一個名爲db2php的插件check it out here。它將允許您生成類,基本上是ORM。太棒了,如果你不使用框架。如果您使用Zend框架,請在NetBeans站點上搜索Zend Framework支持或右鍵單擊項目,然後轉至Zend - >Run Zend Command

此外,爲了便於連接和代碼生成使用ALT + Insert,節省了大量的時間。上下文根據您在文檔中定義的內容而變化。


編輯於2010年10月1日

沒有軟件有定製的模板系統數據庫表的創建。人們試圖轉換到更標準化和無sql的方式,換句話說就是ORM。學說是其中之一,但有學習曲線。

解決方案#1

你可能要考慮標準的NetBeans模板系統。如果你轉到[工具 - >模板 - > PHP部分],你將能夠添加模板,然後通過[右鍵 - >新建 - >其他 - >你的模板]從你的模板創建新的類。擴展PHP類可能會爲你做。這裏是Sun's blog showing how to use templates,也在Google上做一些搜索。

解決方案#2

繼承可能是你的答案。創建具有連接和常用方法的BaseTable,然後創建從BaseTable獲取(擴展)的ChildTable。

您可以創建數據訪問層(DAL)來創建通用數據訪問方法或創建表對象。

下面是DAL的例子

abstract class DALBase { 

    /** 
    * Database connection 
    * @var <type> 
    */ 
    protected $_connection = null; 
    /** 
    * Name of table 
    * @var string 
    */ 
    protected $_tbl = null; 
    /** 
    * Name of primary key column 
    * @var string 
    */ 
    protected $_key = null; 

    /** 
    * Default Init 
    */ 
    public function __construct() { 
     $this->_tbl = 'table_name'; 
     $this->_key = 'primary_key'; 
    } 

    /** 
    * Gets the connection 
    * 
    * @return <type> 
    */ 
    private function _getConnection() { 
     if (!$this->_connection) { 
      $this->_connection = mysqli_connect('localhost', 'zend101', '', 'zend101', '3306'); 
      if (!$this->_connection) { 
       throw new Exception('Could not connect to MySQL: ' . mysqli_connect_error()); 
      } 
     } 

     // 
     return $this->_connection; 
    } 

    /** 
    * Executes the query 
    */ 
    public function executeQuery($query) { 
     $conn = $this->_getConnection(); 
     return mysqli_query($conn, $query); 
    } 

    /** 
    * Loads item by primary key 
    * 
    * @param mixed $id 
    * @return object 
    */ 
    public function getByID($id) { 
     // 
     $query = "SELECT * FROM $this->_tbl WHERE $this->_key = $id"; 

     // 
     $conn = $this->_getConnection(); 
     $result = $this->executeQuery($query); 

     // 
     $item = mysql_fetch_object($query); 

     // 
     return $item; 
    } 

    /** 
    * Loads a list 
    * 
    * @return array 
    */ 
    public function loadList() { 

     // 
     $data = array(); 

     // 
     $result = $this->executeQuery("SELECT * FROM $this->_tbl"); 
     if ($result) { 
      // Scan through the resource 
      while ($row = mysql_fetch_object($result)) { 
       // put row object into the array 
       $data[] = $row; 
      } 
     } 

     // 
     return $data; 
    } 

} 

/** 
* Car table 
*/ 
class DALCar extends DALBase { 

    /** 
    * 
    */ 
    public function __construct() { 
     $this->_tbl = 'car'; 
     $this->_key = 'vin'; 
    } 

} 

/** 
* Client table 
*/ 
class DALClient extends DALBase { 

    /** 
    * 
    */ 
    public function __construct() { 
     $this->_tbl = 'client'; 
     $this->_key = 'id'; 
    } 

} 

// Usage 
$dal = new DALClient(); 
$clients = $dal->loadList(); 
$client1 = $dal->getByID(1); 
$client5 = $dal->getByID(5); 

您可以重寫父類,並使其表通用的,你把所有的字段並保存方法,刪除方法,等等......然後子類將擴展它,並使其具體表。 複製代碼並不是一個好習慣,無處不在使用模板。最好是擴展類,如果你決定做出改變,你將不得不在1個地方改變它。但是,如果你有幾十個表格並且你使用了模板,那麼你可能需要做幾十次更改。

正好碰上一個有趣的話題,如果你使用的PHP的ORM如Doctrine他們非常有據可查的命令行工具,使您能夠自動生成類存根可能會幫助你Which database patterns (ORM, DAO, Active Record, etc.) to use for small/medium projects?

+0

ALT + Insert究竟做了什麼? – Diego 2010-09-30 14:58:28

+0

有什麼辦法可以設置db2php。例如建立我自己的類模板並告訴db2php使用它? – Diego 2010-09-30 14:59:49

+1

'ALT + Insert'會打開代碼生成菜單。簡單的方法來插入數據庫連接,getter,setters,輸出表內容...從字面上3點擊...不幸的是表的類創建。 您可以使用db2php輕鬆生成表類,從db中將數據加載到db2php表類中,然後獲取屬性並將其傳遞到您的模板。 – Alex 2010-09-30 16:27:32