Фронт-контроллер (index.php) гарантирует, что все, что является общим для всего сайта (например, аутентификация), всегда корректно обрабатывается, независимо от того, какую страницу вы запрашиваете. Если у вас есть 50 разных PHP-файлов, разбросанных повсюду, это сложно сделать. А что если вы решите изменить порядок загрузки файлов общей библиотеки? Если у вас есть только один файл, вы можете изменить его в одном месте. Если у вас есть 50 различных точек входа, вам необходимо изменить их все.
Кто-то может сказать, что загрузка всех распространенных вещей все время является пустой тратой ресурсов, и вам следует загружать только те файлы, которые необходимы для этой конкретной страницы. Правда. Но в современных PHP-фреймворках интенсивно используются ООП и автозагрузка, поэтому таких «отходов» больше не существует.
Фронт-контроллер также позволяет вам иметь красивые URL-адреса на вашем сайте, потому что вы абсолютно свободно можете использовать любой URL-адрес, который вам нравится, и отправлять его на любой контроллер / метод, который вам нужен. В противном случае вы застрянете с каждым URL-адресом, заканчивающимся .php
, за которым следует ужасный список строк запроса, и единственный способ избежать этого - использовать еще более уродливые правила перезаписи в вашем файле .htaccess. Даже WordPress, имеющий десятки различных точек входа (особенно в разделе администратора), заставляет самые распространенные запросы проходить через index.php, чтобы вы могли иметь гибкий постоянный формат.
Практически все веб-фреймворки на других языках используют отдельные точки входа, или, точнее, один скрипт вызывается для начальной загрузки процесса, который затем связывается с веб-сервером. Джанго работает так. CherryPy работает так. Это очень естественно сделать это в Python. Единственным широко используемым языком, позволяющим писать веб-приложения любым другим способом (кроме случаев, когда он используется как скрипт CGI старого стиля), является PHP. В PHP вы можете дать любому файлу расширение .php
, и он будет выполняться веб-сервером. Это очень мощный инструмент, облегчающий изучение PHP. Но как только вы преодолеете определенный уровень сложности, подход с одной точкой входа начинает выглядеть намного привлекательнее.