Вопрос

Есть ли простой способ написать общую функцию для каждого из 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.В этом примере поле «студент» представлено в виде текстового поля (отсюда и тип «текст»).«Название» — это просто используемый ярлык.Будучи «скрытым», поле ID не отображается для редактирования, но доступно программе для использования.

Если бы я передал «удалить» вместо «редактировать», запись была бы удалена из переменной GET.Если бы я передал только имя таблицы, по умолчанию это был бы список записей с кнопками для редактирования, удаления и создания нового.

Это всего лишь один класс, который содержит все CRUD с множеством возможностей настройки.Вы можете сделать его настолько сложным или простым, насколько пожелаете.Сделав его универсальным классом, я могу добавить его в любой проект и просто передавать инструкции, информацию о таблицах и информацию о конфигурации.Для одной таблицы я мог бы не захотеть разрешать добавление новых записей через scaffold, в этом случае я мог бы установить для «newbutton» значение false в моем массиве параметров.

Это не фреймворк в привычном понимании.Просто отдельный класс, который обрабатывает все внутри.В этом есть некоторые недостатки.Ключевым из них должно быть то, что все мои таблицы должны иметь первичный ключ с именем «id». Вы можете обойтись и без этого, но это усложнит ситуацию.Во-вторых, необходимо подготовить большой массив подробной информации о каждой управляемой таблице, но сделать это нужно только один раз.

Учебник по этой идее см. здесь

Другие советы

Если вы попытаетесь написать такую ​​функцию, вы вскоре обнаружите, что только что реализовали еще одну структуру.

Конечно, нет, именно поэтому эти фреймворки существуют и реализуют средства crud.Сначала я пытался убедить кого бы то ни было действительно использовать существующую структуру, а во-вторых, если вышеперечисленное не удалось, я бы посмотрел на одну или две из них и скопировал идеи реализации.Не имея всего того, на что вы могли бы взглянуть. http://www.phpobjectgenerator.com/

Без каких-либо фреймворков включается без каких-либо ORM?В противном случае я бы посоветовал посмотреть Доктрина или продвигать.

Я знаю, что ты чувствуешь.

Pork.DbObject — это простой класс, из которого вы можете расширять свои объекты.Для работы просто нужен класс подключения к базе данных.

пожалуйста, проверьте:www.schizofreend.nl/pork.dbobject/

(о да, тьфу @ генератор объектов php. предупреждение о раздувании! кто хочет иметь эти пользовательские функции в каждом классе???)

Я думаю, вам следует написать свои собственные функции, обеспечивающие CRUD, если только у вас нет недостатка во времени.это может быть отдельный фреймворк, но вам нужно узнать, что он делает, прежде чем кричать «фреймворк».... также полезно знать эти вещи, потому что вы можете легко обнаружить ошибки в фреймворке и исправить их самостоятельно.... ....

Некоторое время назад я столкнулся с этим вопросом на SO и в итоге не нашел в то время ничего, что делало бы это легко.

В итоге я написал свой собственный, и недавно я открыл его исходный код (лицензия MIT) на случай, если другие найдут его полезным.Он доступен на Github, не стесняйтесь проверить его и использовать, если он соответствует вашим потребностям!

https://github.com/ArthurD/php-crud-model-class

Надеюсь, он найдет какое-нибудь применение — мне бы тоже хотелось увидеть некоторые улучшения/вклады, поэтому не стесняйтесь отправлять запросы на включение!:-)

это возможно, но я бы не рекомендовал.

Если нет абсолютно НИКАКОГО способа использовать структуру, вы можете создать базовый класс, который расширяет все остальные объекты модели.Затем вы можете заставить базовый класс генерировать и выполнять SQL на основе get_class() и get_class_vars().

Является ли это возможным?Да.
Буду ли я рекомендовать это?неа

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top