Простой/многоразовый CRUD в PHP (БЕЗ славы и больших классов)

StackOverflow https://stackoverflow.com/questions/386838

  •  23-08-2019
  •  | 
  •  

Вопрос

Я работаю над проектом, похожим на PHP CMS, и пытаюсь выяснить, какой наиболее удобный способ работы с функциональностью CRUD в PHP.

CMS полностью запрограммирована на процедурном PHP (без ООП - я знаю, что многие из вас с этим не согласятся...) и была разработана с учетом максимально простого и легкого подхода, а также создания функций и фрагментов кода с возможностью многократного использования. .

CMS позволяет устанавливать/активировать несколько модулей по мере необходимости.Эти модули описывают различные типы контента, поэтому, вероятно, в конечном итоге у меня будет что-то вроде страниц, новостей, блогов и это лишь некоторые из них.

Для каждого из этих типов контента мне придется создать операции CRUD, и теперь я пытаюсь найти наиболее удобный способ добиться этого.

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

Это было полезно?

Решение

Под операциями CRUD вы подразумеваете только (утомительные) запросы к базе данных?

Вы можете так же легко настроить свою базу данных так, чтобы, за исключением нескольких общих полей среди типов контента, все данные для определенного типа контента хранились в виде сериализованного ассоциативного массива в поле TEXT.

Таким образом, вам понадобится только один набор запросов к CRUD любого конкретного типа контента, поскольку данные, передаваемые в функции CRUD, просто сериализуются вслепую.

Например, предположим, что мы заявляем, что заголовок контента, дата создания/обновления, теги и краткое описание считаются общими данными.Отсюда у нас есть блог и тип контента страницы.

Я бы, возможно, создал таблицу базы данных как таковую:

CREATE TABLE `content` (
  `id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
  `name` VARCHAR  NOT NULL,
  `short_description` TEXT  NOT NULL,
  `tags` TEXT ,
  `data` TEXT ,
  `content_type` INT  NOT NULL,
  `created_at` DATETIME  NOT NULL,
  `updated_at` DATETIME  NOT NULL,
  PRIMARY KEY (`id`)
)

(Предположим, что мы создадим справочные таблицы для content_type)

И хотя для блога могут потребоваться такие данные, как «пингбэки», а для страницы может потребоваться только тело, вы просто сохраняете выходные данные, подобные приведенному ниже примеру для блога:

$data = serialize(array(
    "body" => "Lorem ipsum",
    "pingbacks" => array()
));

Обновления просты: всякий раз, когда вы извлекаете данные из базы данных, вы десериализуете их для редактирования в форму, выбранную в зависимости от типа контента.Отображение работает таким же образом: просто возьмите шаблон на основе типа контента и отправьте ему несериализованный массив данных.Шаблону никогда не нужно беспокоиться о том, как хранятся данные, он просто получает $data['pingbacks'].

Что касается ваших форм, я предлагаю нарушить ваш завет против ООП и найти библиотеку генерации форм.Если вы можете извлечь его из фреймворка, используя Zend_Form с Zend_Config и Zend_Validate из Zend-фреймворк (все, что Zend_Config в этой ситуации представляет собой удобный интерфейс для загрузки и просмотра файлов XML и INI) делает жизнь действительно приятной.Вы можете сделать так, чтобы ваши XML-файлы определяли форму для каждого типа контента, и все, что вам нужно сделать, это просто отобразить форму на своей странице (захватив XML на основе типа контента), получить отфильтрованные данные, удалить «общие поля», такие как имя, даты создания/обновления, а затем сериализацию оставшегося в базу данных.Никакого знания схемы для конкретного типа контента не требуется (если вы не хотите быть строгим).

Хотя лично я бы настоятельно рекомендовал вам изучить Zend_Form (с Zend_Validate и Zend_Config), а также использовать Доктрина как уровень абстракции ORM/базы данных.Вы можете обнаружить, что, по крайней мере, Doctrine значительно облегчит вам жизнь, когда дело доходит до выполнения операций с базой данных.

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

Хотя лично я бы настоятельно рекомендовал вам изучить Zend_Form (с Zend_Validate и Zend_Config), а также использовать Doctrine в качестве уровня абстракции ORM/базы данных.Вы можете обнаружить, что, по крайней мере, Doctrine значительно облегчит вам жизнь, когда дело доходит до выполнения операций с базой данных.

Я согласен с Кузино.Зачем сворачивать свое, если оно уже сделано?я бы тоже посмотрел Зенд БД, и если вам нужно решение PHP4 и 5 PHP ADOdb.

Недавно я начал академический проект и имел то же желание, что и вы;в конце концов я выбрал PHP ADoDB.

Я предлагаю www.ajaxcrud.com — он прост в использовании, легок и позволяет вам приступить к работе за считанные секунды.

Вы можете попробовать это: http://xcrud.com, действительно полезно

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