Для выполнения CRUD с использованием php, без использования каких-либо фреймворков, cakePHP, Smarty, как лучше всего организовать php-код в файлы? - PullRequest
2 голосов
/ 01 февраля 2009

Допустим, у меня есть таблица базы данных "виджеты"

Должен ли быть файл index.php с большим оператором switch для различных действий, таких как "list_widgets", "edit_widget", "new_widget", "delete_widget" ... и затем каждое из этих действий в отдельном файле?

Или, если это будут list_widgets.php, edit_widget.php, delete_widget.php ....

Или как-то иначе?

РЕДАКТИРОВАТЬ (после прочтения первого ответа). Я действительно спрашиваю, как называются файлы на моем жестком диске. Если бы я создал веб-сайт, который только что отредактировал одну таблицу виджетов, какими были бы имена файлов на моем жестком диске для этого проекта?

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

Ответы [ 5 ]

1 голос
/ 01 февраля 2009

Если это учебное упражнение с PHP, то каковы ваши цели? Вы хотите реализовать полную архитектуру MVC (только ради упражнения)? Вы хотите использовать Front Controller, который направляет запросы на определенные контроллеры? Или вы хотите создать простой скрипт-сайт, способный редактировать только вашу таблицу виджетов?

Если это какой-либо из первых, то я бы порекомендовал вам прочитать документацию и исходный код для одной из платформ (мне особенно нравится Zend Framework), а затем реализовать свою собственную версию MVC и / или Front Controller. Кроме того, вы можете прочитать эту статью Расмуса Лердорфа , в которой Расмус рассказывает о том, как создать простое приложение MVC без использования существующего фреймворка.

Если вы просто хотите выполнить последнее (отредактируйте таблицу виджетов), я бы порекомендовал вам сделать все просто. Поэтому я бы:

  • Создайте файл (WidgetsTable.php) с функциями, которые напрямую взаимодействуют с таблицей. Например, insert (), update (), delete (), fetchAll (), createNew ()
  • Создайте файл (index.php или widgets.php), с которым вы будете взаимодействовать напрямую (в некоторых парадигмах это будет Page Controller). Этот файл будет содержать функции, такие как createAction (), listAction (), findAction (), showFormAction (). Это будет страница, на которую производятся вызовы, и функции на этой странице будут взаимодействовать с функциями (или методами класса), которые вы создали в первом файле.
  • Создайте папку с именем views или templates и создайте соответствующий файл view или template для каждого действия в widgets.php. Например, вы должны создать list.php, showForm.php, create.php.

Это обеспечит правильное разделение интересов и облегчит настройку общей структуры проекта позже, если вам это понадобится.

Удачи в вашем учебном проекте! : -)

1 голос
/ 01 февраля 2009

Я бы создал класс Widget и дал бы ему методы edit (), new () и delete (). Тогда у вас может быть функция list (), которая создает массив экземпляров Widget. Я бы, вероятно, пошел дальше и создал бы класс WidgetList ( WidgetList.php ), даже если изначально он был просто оберткой вокруг массива.

Изначально у меня был бы Widget.php файл для класса и index.php для обработки различных запросов.

Я всегда проверяю, чтобы файлы, содержащие мои классы, имели то же имя, что и сами классы (обычно по одному на файл). Это упрощает определение местоположения и упрощает использование функции __ autoload .

Тогда у меня будет файл .htaccess для создания дружественных URL-адресов, которые отправляют различные типы запросов в index.php . Примерно так:

Options ExecCGI FollowSymLinks Includes MultiViews

RewriteEngine On
RewriteRule /new index.php?action=new
RewriteRule /edit/([0-9]+) index.php?action=edit&widget_id=$1

То, как вы выполняете URL, зависит от того, как ваши виджеты действительно будут работать.

0 голосов
/ 01 февраля 2009

Я уверен, что это, вероятно, дело вкуса, но я считаю, что создание 3 файлов (список, добавление, редактирование) для 1 таблицы достаточно гибко, но в то же время упрощает понимание, особенно для разработчиков, начинающих работать с php.

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

...
includes/
views/
add_member.php
edit_member.php
list_member.php
add_widget.php
edit_widget.php
list_widget.php
...

с папкой includes/, в которой хранятся файлы конфигурации и функций, и папка views/, содержащая различные файлы фрагментов, такие как заголовок, навигация, нижний колонтитул и т. Д.

0 голосов
/ 01 февраля 2009

Вы когда-нибудь смотрели на http://www.phpobjectgenerator.com/

Он генерирует действительно красиво отформатированные объекты CRUD для таблиц базы данных.

0 голосов
/ 01 февраля 2009

Вероятно, было бы проще просмотреть структуру файла, если бы она была /widget/edit.php или /widget/new.php

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

Кроме того, это позволит вам немного проще реализовать переписывание URL, чтобы оно выглядело как widget / edit / 2, как только вы получите index.php и некоторые правила перезаписи.

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