Зачем использовать одну страницу index.php для всего сайта? - PullRequest
13 голосов
/ 03 ноября 2010

Я принимаю существующий проект PHP. Я заметил, что предыдущий разработчик использует одну страницу index.php для всего сайта, в настоящее время более 10 страниц. Это второй проект, который я видел, сделал так. Я не вижу преимущества этого подхода. На самом деле все кажется слишком сложным, потому что теперь вы не можете просто добавить новую страницу на сайт и дать ссылку на нее. Вы также должны убедиться, что вы обновили главную страницу индекса предложением if, чтобы проверить этот тип страницы, а затем загрузить страницу. Кажется, если они просто пытаются повторно использовать шаблон, было бы проще просто использовать include для верхнего и нижнего колонтитула, а затем создавать каждую новую страницу с указанными файлами.

Может кто-нибудь объяснить, почему этот подход будет использоваться? Это какая-то форма шаблона MVC, с которой я не знаком? PHP - второй язык, поэтому я не так хорошо знаком с лучшими практиками.

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

Ответы [ 6 ]

17 голосов
/ 03 ноября 2010

Фронт-контроллер (index.php) гарантирует, что все, что является общим для всего сайта (например, аутентификация), всегда корректно обрабатывается, независимо от того, какую страницу вы запрашиваете. Если у вас есть 50 разных PHP-файлов, разбросанных повсюду, это сложно сделать. А что если вы решите изменить порядок загрузки файлов общей библиотеки? Если у вас есть только один файл, вы можете изменить его в одном месте. Если у вас есть 50 различных точек входа, вам необходимо изменить их все.

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

Фронт-контроллер также позволяет вам иметь красивые URL-адреса на вашем сайте, потому что вы абсолютно свободно можете использовать любой URL-адрес, который вам нравится, и отправлять его на любой контроллер / метод, который вам нужен. В противном случае вы застрянете с каждым URL-адресом, заканчивающимся .php, за которым следует ужасный список строк запроса, и единственный способ избежать этого - использовать еще более уродливые правила перезаписи в вашем файле .htaccess. Даже WordPress, имеющий десятки различных точек входа (особенно в разделе администратора), заставляет самые распространенные запросы проходить через index.php, чтобы вы могли иметь гибкий постоянный формат.

Практически все веб-фреймворки на других языках используют отдельные точки входа, или, точнее, один скрипт вызывается для начальной загрузки процесса, который затем связывается с веб-сервером. Джанго работает так. CherryPy работает так. Это очень естественно сделать это в Python. Единственным широко используемым языком, позволяющим писать веб-приложения любым другим способом (кроме случаев, когда он используется как скрипт CGI старого стиля), является PHP. В PHP вы можете дать любому файлу расширение .php, и он будет выполняться веб-сервером. Это очень мощный инструмент, облегчающий изучение PHP. Но как только вы преодолеете определенный уровень сложности, подход с одной точкой входа начинает выглядеть намного привлекательнее.

1 голос
/ 03 ноября 2010

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

0 голосов
/ 03 ноября 2010

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

В современных веб-фреймворках это может быть использование фронт-контроллера, но это невозможно сказать, так как многие PHP-разработчики / разработчики страдают от синдрома NIH.

0 голосов
/ 03 ноября 2010

Что касается меня - единственная точка входа может помочь вам лучше контролировать ваше приложение: оно помогает легко обрабатывать ошибки, запросы маршрутизации, отлаживать приложение.

0 голосов
/ 03 ноября 2010

Что ж, если единственное, что меняется, это URL, то не похоже, что это сделано по какой-либо причине, кроме эстетических целей ...

0 голосов
/ 03 ноября 2010

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

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