Есть простой способ написать общую функцию для каждой из операций CRUD (create, retreive, update, delete)
в PHP
без использования какой-либо фреймворка. Например, я хочу иметь одну функцию создания, которая принимает имена таблиц и имена полей в качестве параметров и вставляет данные в mySQL database
. Еще одно требование состоит в том, что функция должна иметь возможность поддерживать соединения, поэтому она должна иметь возможность вставлять данные в несколько таблиц, если это необходимо.
Я знаю, что эти задачи можно было бы сделать, используя фреймворк, но по разным причинам – слишком длинным для объяснения здесь – я не могу их использовать.
Я написал это, это своего рода полированный эшафот. Это в основном класс, конструктор которого принимает таблицу, которая будет использоваться, массив, содержащий имена и типы полей, и действие. На основе этого действия объект вызывает метод сам по себе. Например:
Это массив, который я передаю:
$data = array(array('name' => 'id', 'type' => 'hidden') , array('name' => 'student', 'type' => 'text', 'title' => 'Student'));
Затем я вызываю конструктор:
new MyScaffold($table, 'edit', $data, $_GET['id']);
В приведенном выше случае конструктор вызывает метод «edit», который представляет форму, отображающую данные из таблицы $, но только поля, которые я установил в своем массиве. Используемая запись определяется методом $ _GET. В этом примере поле «ученик» представлено как текстовое поле (отсюда и тип «текст»). «Title» – это просто используемый ярлык. Будучи «скрытым», поле ID не отображается для редактирования, но доступно для использования программой.
Если бы я удалил «delete» вместо «edit», он удалил бы запись из переменной GET. Если бы я передал только имя таблицы, то по умолчанию был бы список записей с кнопками для редактирования, удаления и нового.
Это всего лишь один класс, который содержит все CRUD с большой настраиваемостью. Вы можете сделать это сложным или простым, как вы пожелаете. Сделав его универсальным классом, я могу отбросить его в любой проект и просто передать инструкции, информацию о таблице и информацию о конфигурации. Я мог бы за одну таблицу не захотеть, чтобы новые записи могли быть добавлены через эшафот, в этом случае я мог бы установить «newbutton» в false в моем массиве параметров.
Это не ракурс в общепринятом смысле. Просто автономный класс, который обрабатывает все внутренне. Есть некоторые недостатки. Ключевыми должны быть то, что все мои таблицы должны иметь первичный ключ с именем «id», вы можете уйти без этого, но это усложнит ситуацию. Другое существо должно быть подготовлено для большого массива, детализирующего информацию о каждой управляемой таблице, но вам нужно сделать это только один раз.
Для учебника по этой идее см. Здесь
Если вы попытаетесь написать такую функцию, вы скоро обнаружите, что только что поняли еще одну структуру.
Конечно, нет, поэтому эти рамки существуют и реализуют грубые объекты. Сначала я попытался убедить кого бы то ни было, чтобы фактически использовать существующую инфраструктуру, а во-вторых, не получив вышеуказанного, я бы посмотрел один или два из них и скопировал идеи реализации. В противном случае вы можете взглянуть на http://www.phpobjectgenerator.com/
Без каких-либо структур без ORM? В противном случае я бы предложил взглянуть на Доктрину или Propel .
Я знаю, как вы себя чувствуете.
Pork.DbObject – это простой класс, из которого вы можете расширить свои объекты. Для работы просто нужен класс связи db.
пожалуйста, посетите: http://www.schizofreend.nl/pork.dbobject/
(oh yeah, yuk @ php object generator. bloat alert! Кто хочет иметь эти пользовательские функции в каждом классе ???)
Я думаю, что вы должны написать свои собственные функции, которые достигают CRUD, если вы не стресс на время. это может быть каркас на своем собственном уровне, но вам нужно узнать, что делает инфраструктура перед криком фреймворка … Также полезно знать эти вещи, потому что вы можете легко подобрать ошибки в структуре и исправить их самостоятельно … ….
Я наткнулся на этот вопрос на SO некоторое время назад, и я не обнаружил в то время ничего, что делало это легким способом.
Я закончил писать свои собственные, и недавно я получил возможность открыть его (лицензию MIT) в случае, если другие могут оказаться полезными. Это на Github, не стесняйтесь проверить его и использовать, если он соответствует вашим потребностям!
https://github.com/ArthurD/php-crud-model-class
Надеюсь, он найдет какое-то применение – хотелось бы увидеть некоторые улучшения / вклады, так что не стесняйтесь подавать заявки на тягу! 🙂
это возможно, но я бы не рекомендовал его.
Если нет абсолютно никакого способа использовать фреймворк, вы могли бы создать базовый класс, который расширяют все остальные объекты модели. Затем вы можете заставить базовый класс генерировать и выполнять SQL на основе get_class()
и get_class_vars()
.
Является ли это возможным? Да.
Я бы рекомендовал? Неа