Простой / многоразовый CRUD в PHP (без феймворка или больших классов) - PullRequest
1 голос
/ 22 декабря 2008

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

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

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

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

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

Ответы [ 4 ]

4 голосов
/ 22 декабря 2008

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

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

Таким образом, вам нужен только 1 набор запросов для 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)

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

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

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

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

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

1 голос
/ 24 декабря 2008

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

Я согласен с dcousineau. Зачем кататься, когда это уже сделано? Я также хотел бы взглянуть на Zend DB , и если вам нужно решение PHP4 и 5 PHP ADOdb .

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

0 голосов
/ 17 декабря 2013

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

0 голосов
/ 27 ноября 2013

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...