Лучшая практика: самоссылочные скрипты на веб-сайте - PullRequest
2 голосов
/ 24 сентября 2008

По совету более опытного разработчика я всегда кодировал свои веб-страницы, которые требуют ввода данных пользователем (обработка форм, администрирование базы данных и т. Д.), Как страницы со ссылками на себя. Для страниц PHP я задаю действие формы для элемента 'PHP_SELF' предопределенной переменной $_SERVER, и в зависимости от аргументов, которые я передаю, логика страницы определяет, какой блок (ы) кода следует выполнить.

Мне нравится, что весь код содержится в одном файле и не распространяется на различные страницы результатов. Одна проблема, которую я обнаружил, состоит в том, что мои программы анализа статистики не могут различать первое представление страницы и последующие представления (например, когда форма была отправлена). Давным-давно, когда я использовал CGI или CF для создания страниц, я направлял пользователя на другую страницу результатов, которая очень четко показывала, сколько раз форма была фактически использована.

Какова наилучшая практика для этих типов страниц в веб-разработке? Существуют ли другие, более веские причины для использования (или неиспользования) ссылочных страниц?

Ответы [ 5 ]

5 голосов
/ 24 сентября 2008

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

Эта практика подчеркивается MVC (модель-представление-контроллер, http://en.wikipedia.org/wiki/Model-view-controller) фреймворки, такие как Ruby on Rails, Django и ASP.NET MVC (я не знаю PHP-топов моя голова, хотя я уверен, что есть некоторые).

Это также важная особенность практики RESTful (REpresentational State Transfer), где каждый URL представляет ресурс и одно действие, которое должно быть выполнено с этим ресурсом. С другой стороны, ссылочная страница будет иметь «2» действия на URL / страницу, такие как «new» (чтобы заполнить форму) и «create» (чтобы фактически создать объект).

Практика MVC и RESTful (http://en.wikipedia.org/wiki/RESTful) практики для веб-сайтов часто приводят к более чистому коду и лучшему разделению задач. Причина этого важна в том, что это облегчает тестирование (а под тестированием я имею в виду единичное и функциональное тестирование, а не тестирование страницы в моем браузере).

Беспорядок в вашей статистике является примером того, как неразделение ваших проблем может привести к непреднамеренной сложности. Некоторые люди могут подойти к этой проблеме, пытаясь определить источник запроса и посмотреть, была ли это та же страница или нет. Все это на самом деле просто кодовые повязки, которые устраняют проблему, а не исправляют проблему. Если вы сохраняете разные «действия» на разных страницах вашего веб-сайта, вы можете сосредоточить эти страницы на их 1 задании и убедиться, что они справляются хорошо, вместо того, чтобы загромождать код всевозможными условиями и дополнительными сложностями, которых полностью избегать, если 1 страница имеет только 1 работу.

1 голос
/ 24 сентября 2008

В случае, когда я прошу кого-то заполнить форму (генерируемую сценарием в файле), мне нравится отправлять обратно в тот же сценарий, чтобы я мог поместить проверки ошибок вверху, а затем повторно -произвести форму, если обнаружены какие-либо ошибки. Это позволяет мне написать генерацию формы один раз и использовать ее до тех пор, пока ввод не будет принят (т.е. «Пожалуйста, исправьте поля, показанные красным» и т. Д.).

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

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

1 голос
/ 24 сентября 2008

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

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

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

0 голосов
/ 24 сентября 2008

Вы можете использовать отдельные страницы, и только страница результатов включает страницу формы.

0 голосов
/ 24 сентября 2008

Один из возможных вариантов - установить псевдонимы mod_rewrite, указывающие на один и тот же URL. Например:

RewriteEngine on
RewriteRule ^form$ form.php [QSA]
RewriteRule ^form/submit$ form.php [QSA]

Это позволит вам отслеживать запросы, сохраняя код в том же файле.

...