Как мне структурировать мой проект PHP? - PullRequest
6 голосов
/ 16 февраля 2011

Я собираюсь приступить к еще одному крупному PHP-проекту. На этот раз я намерен привести папку проекта в порядок! Поэтому у меня есть несколько вопросов, касающихся поддержания чистоты и сухости моего проекта:

  • Как отличить исходные файлы PHP от файлов PHP, к которым должен обращаться браузер? Другими словами, как мне понять, какие файлы PHP выдают, а какие дают определения функций или классов?

  • Я планирую разделить мои функции PHP на статические классы, разделенные по темам, например, database :: create () или editor :: write (). Что вы думаете об этом?

  • Я планирую создать файл PHP "core.php", который будет включен в начало КАЖДОГО ОДНОГО файла PHP в проекте. Этот файл будет обрабатывать аутентификацию и включать базовые функции. Мысли

  • Проект будет в значительной степени основан на Ajax. Возникает вопрос: должны ли мои PHP-функции быть реальными PHP-функциями или они должны быть отдельными PHP-файлами, которые принимают ввод GET или POST? Мой план делает оба . Я создаю папку для исходных файлов PHP и одну для «ajax» -файлов PHP (или чего-то еще), а последняя папка заполняется именами файлов по функциям, которые они будут выполнять. Файл PHP будет просто содержать вызов функции и записывать вывод для Ajax. Мысли

Любые другие комментарии или советы, прежде чем я начну этот проект, были бы великолепны!


Редактировать

Возможно, мне не удалось подчеркнуть, насколько сильно Ajax будет базировать это веб-приложение. Codeigniter кажется отличным инструментом для создания веб-страниц или простых веб-приложений, таких как блог. Мое приложение будет немного другим. Как и в веб-интерфейсе uTorrent, мое веб-приложение будет статичным на одной странице, и Ajax будет выполнять все скрытые действия. Кажется, немного неловко использовать Codeigniter для такого проекта.

Существует ли другая архитектура, созданная с учетом такого рода приложений?

Ответы [ 4 ]

3 голосов
/ 16 февраля 2011

Если вы ожидаете, что это будет большой проект, я настоятельно рекомендую использовать одну из многих уже существующих фреймворков, таких как Symfony или Zend.Вы бы:

  • резко сократили объем кода, который вам нужно написать
  • избегайте ошибок в ваших компонентах
  • изучите лучшие практики

Но вы, если вы настаиваете на том, чтобы сделать это самостоятельно.

Я планирую создать файл PHP "core.php", который будет включен в начало КАЖДОГО ОДНОГО файла PHP в проекте.Этот файл будет обрабатывать аутентификацию и включать базовые функции.Мысли?

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

Во-вторых, нет необходимости изобретать велосипед, когда онПришло время абстрагироваться от базы данных, взгляните на проекты MDB2 или Doctrine.

Большое количество статических классов также является признаком плохо продуманной разработки.Статические классы должны использоваться экономно, так как их сложно тестировать, и часто они не нужны.

3 голосов
/ 16 февраля 2011

Рассматривали ли вы использование фреймворка, такого как Codeigniter?Вы знакомы с какими-либо шаблонами проектирования, такими как MVC?И то, и другое поможет определить местоположение файлов и разделить логику в вашем проекте.

РЕДАКТИРОВАТЬ: Codeigniter использует MVC, который является просто отличным шаблоном для веб-программирования.Проверьте эти два видео, которые они имеют для учебников.Всего около 30 минут, и, безусловно, полные хороших знаний, как взгляда на работу их фреймворка, так и на понимание структуры их папок.

EDIT2: http://codeigniter.com/tutorials

1 голос
/ 16 февраля 2011

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

После этого вы можете иметь условие в верхней части всех остальных файлов, чтобы к ним нельзя было получить прямой доступ, например:

<?php if(FROM_INDEX!="true") die("<b>ACCESS_ERROR</b><br /><br />Please use the main page instead of accessing this file directly.");

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

0 голосов
/ 16 февраля 2011

Я не уверен, насколько сложна система, которую вы ищете.Но недавно я нашел небольшую структуру, которая работает от URL.https://github.com/ivorychicken/sammy

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

...