Мастер Netbeans для создания классов php

Мне нужен мастер, в который я вставляю соединение с базой данных, и с некоторыми настройками он генерирует классы PHP. Мастер может использовать (внутри) уже созданный шаблон.

Это возможно? Это уже существует? Если нет, есть идеи, как это сделать?

Спасибо!

Изменить

Я ищу что-то, что позволит мне создать собственный шаблон класса или настроить его.


person Diego    schedule 30.09.2010    source источник
comment
Что не так с уже существующими реализациями, такими как msqli или pdo или pear?   -  person Russell Dias    schedule 30.09.2010


Ответы (2)


NetBeans рулит!

NetBeans имеет мощную поддержку MySql, однако в нем нет встроенных инструментов для создания классов из таблиц.

Существует подключаемый модуль db2php, ознакомьтесь с ним здесь. Это позволит вам создавать классы, в основном ORM. Отлично, если вы не используете фреймворки. Если вы используете платформу Zend, найдите поддержку Zend Framework на сайте NetBeans или щелкните проект правой кнопкой мыши и выберите Zend -> Run Zend Command.

Кроме того, для простого подключения и генерации кода используйте ALT + Insert, что экономит много времени. Контекст меняется в зависимости от того, что определено в вашем документе.


Изменить от 1 октября 2010 г.

Не существует программного обеспечения, которое имело бы пользовательскую систему шаблонов для создания таблиц базы данных. Люди пытаются перейти на более стандартизированный и свободный от sql способ, другими словами ORM. Доктрина является одним из них, но есть кривая обучения.

Решение № 1

Возможно, вы захотите изучить стандартную систему шаблонов NetBeans. Если вы перейдете в [Инструменты->Шаблоны->В разделе PHP], вы сможете добавлять шаблоны, а затем создавать новые классы из вашего шаблона с помощью [Правый клик->Создать->Другое->Ваш шаблон]. Расширение класса PHP может сделать это за вас. Вот блог Sun, в котором показано, как использовать шаблоны, также выполните небольшой поиск в Google.

Решение № 2

Наследование может быть ответом для вас. Создайте BaseTable с подключением и общими методами, затем создайте ChildTable, который наследуется (расширяется) от BaseTable.

Вы можете создать уровень доступа к данным (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 месте. Но если у вас есть десятки таблиц и вы использовали шаблон, вам может потребоваться внести десятки изменений.

Просто наткнитесь на интересную тему, которая может вам помочь -medium-p">Какие шаблоны баз данных (ORM, DAO, Active Record и т. д.) использовать для небольших/средних проектов?

person Alex    schedule 30.09.2010
comment
Что именно делает ALT + Insert? - person Diego; 30.09.2010
comment
Есть ли способ настроить db2php. Например, создать свой собственный шаблон класса и указать db2php использовать его? - person Diego; 30.09.2010
comment
ALT+Insert откроет меню генерации кода. Простой способ вставить соединение с базой данных, геттеры, сеттеры, содержимое выходной таблицы... буквально в 3 клика... к сожалению, без создания класса таблицы. Вы можете использовать db2php, чтобы легко создавать классы таблиц, загружать данные из базы данных в класс таблиц db2php, затем получать свойства и передавать их в свой шаблон. - person Alex; 30.09.2010
comment
Спасибо за горячую клавишу ALT+Insert. Я буду использовать его. Но db2php — это не то, что мне нужно. - person Diego; 01.10.2010

Если вы используете ORM в PHP, например Doctrine, у них есть очень хорошо документированные инструменты командной строки, которые позволяют вам для автоматического создания заглушек классов.

Ознакомьтесь с их справочными руководствами.

person tplaner    schedule 30.09.2010