2010-11-03 1 views
13

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

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

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

+0

Как и http://stackoverflow.com/questions/604046/having-a-single-entry-point-to-a-website-bad-good-non-issue – zerkms

+0

@zerkms Спасибо за то, что статья. Мне было тяжело найти что-то вроде того, что я искал. Я посмотрю на это. – spinon

+0

«php front controller», вероятно, принесет больше результатов. Сео-дружеские ссылки - главная причина, на мой взгляд, –

ответ

16

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

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

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

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

+0

Спасибо за подробный ответ. Я вижу в этом какую-то ценность, и я думаю, что это, скорее всего, больше из реализации, которая была сделана здесь, которая меня прослушивает. – spinon

-1

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

+0

Да, я мог это видеть. Но все они имеют отдельные страницы контента, которые загружаются с предложением if на индексной странице. Просто не вижу значения, когда одна страница перенаправляет все запросы. Я имею в виду, что он повторно использует шаблон, но это легко можно сделать с помощью include. – spinon

0

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

+0

Не уверен, что я следую. Страницы все меняются, поскольку каждая из них создает страницу php, которая создается. Он просто загружается на индексную страницу, поэтому URL-адрес остается неизменным, и только параметры меняются. – spinon

+0

Значение «эстетически приятный» 'mysite.com/? Page = about' vs' mysite.com/about.php' – JustcallmeDrago

0

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

+0

Почему запросы маршрутов через один файл? Веб-сервер уже направит запросы на отдельные страницы. Ошибки обычно обрабатываются отдельными страницами php, которые содержат контент. Просто не вижу здесь большой ценности. – spinon

+0

@spinon: это важно для меня, по крайней мере ;-) Вот как мне нравится разрабатывать приложения, основанные на опыте с 7 лет ;-) – zerkms

+0

@spinon: давайте предположим, что во время генерации страницы ваша база данных упадет. Таким образом, вы получаете исключение в середине разделенной страницы. Где вы поймаете это исключение? ;-) – zerkms

0

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

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

+0

, но не можете ли вы просто поместить все это в один файл include, а затем иметь такую ​​же функциональность. Но это обычная реализация, а не структура. – spinon

+0

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

1

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

Смежные вопросы