Маршрутизация в PHP против маршрутизации в Rails - PullRequest
3 голосов
/ 23 апреля 2010

Я работал над PHP последние 1 год, и в настоящее время изучаю Rails.

В rails: - Маршрутизация принимает входящий URL-адрес и декодирует его в набор параметров, которые используются Rails.отправить на соответствующий контроллер и выполнить действие

Например

 rs.recognize_path "/blog/show/123"
 {:controller=>"blog", :action=>"show", :id=>"123"}

Я прав?

Мы упоминаем эту (записанную) строку кода в наших маршрутах.в директории config, чтобы сообщить rails, как обрабатывать запрос типа "/ blog / show / 123", используя эту строку кода.

map.connect "blog/show/:id", :controller => "blog", :action => "show", :id => /\d+/

Теперь в PHP, когда мы делаем что-то подобное

www.example.com/profile.php?profile_id=2

Как запрос отправляется на запрашиваемую страницу?Значит, я никогда ничего не писал для маршрутизации в PHP, так как же обрабатывается этот запрос?Как осуществляется маршрутизация в PHP (что я пропустил во время обучения / работы в PHP)?

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

Ответы [ 5 ]

6 голосов
/ 23 апреля 2010

Вы не можете реально сравнить Rails с PHP - это даже не то, что сравнивать яблоки и апельсины;это как сравнивать яблоко с апельсиновым деревом.Как правило, следует учитывать три вещи:

  1. Веб-сервер - часть программного обеспечения, которая обрабатывает входящие соединения (например, Apache, nginx, Eebrick)
  2. Интерпретатор - приложение, которое выполняет динамическоескрипты (например, Ruby, PHP, Perl)
  3. Веб-фреймворк - набор библиотек и служебных классов, которые помогают разрабатывать веб-приложения (например, Rails, CakePHP, Code Igniter, Django)

В простейшем случае веб-сервер использует входящий URL-адрес в качестве пути к файлу, который запрашивает пользователь:

http://example.com/example.php -> /var/www/example.php
http://example.com/other.rb -> /var/www/other.rb

Большинство статических файлов (изображения, стили и т. Д.) Обрабатываются таким образом.Вы можете передать некоторые параметры, используя строку запроса (в форме ?a=foo&b=bar).Однако вы можете настроить свой веб-сервер для маршрутизации URL-адресов с использованием более сложных правил.Например, в Apache вы можете использовать mod_rewrite для указания некоторых правил с помощью регулярных выражений, которые отображают URL-адреса на другие URL-адреса.Например, в Apache:

RewriteRule /foo/(.*)$ /index.php?id=$1

будет сопоставлять каждый запрос, начинающийся с /foo/, с файлом index.php и передавать оставшуюся часть URL-адреса как параметр id:

http://example.com/foo/bar       -> /var/www/index.php?id=bar
http://example.com/foo/other/bar -> /var/www/index.php?id=other/bar

Теперь ваше дело, что делать с запросами.В приложениях Rails URL-адреса отображаются непосредственно на действия в контроллерах.В PHP вы можете использовать фреймворки, которые ведут себя одинаково.Например, в CakePHP запрос к / posts / show / 2 будет выполнять метод show (2) в классе PostsController.Существует также класс Router, который отправляет запросы контроллерам.

Надеюсь, мой ответ немного помог;)

3 голосов
/ 23 апреля 2010

В вашем примере с PHP страница находится по указанному пути profile.php.Этот файл ищется вашим веб-сервером и (если найден) выполняется.

В Rails URL-адреса сопоставляются с маршрутами, чтобы найти соответствующий контроллер.В вашем примере с Rails blog сопоставляется с BlogController.Теперь Rails знает, что файл, содержащий контроллер, можно найти как apps/controllers/blog_controller.rb.У каждого контроллера есть действия, поэтому часть show сопоставляется с действием show BlogController, которое представлено методом show в контроллере.Для получения информации о маршрутах Rails прочитайте Руководство по маршрутизации Rails .

Таким образом, чтобы быть короткими

  • в PHP, ваши URL сопоставляются с реальными файлами: очень простомаршруты не требуются.
  • в Rails ваши URL могут быть более сложными (возможности контроллера / действия), но требовать маршрутов.
2 голосов
/ 23 апреля 2010
www.example.com/profile.php?profile_id=2

? отделяет ресурс / объект URI от строки запроса .Браузер отправляет весь URI на сервер, который ищет www.example.com/profile.php и передает информацию о том, что для профиля GET запрашивается profile_id=2.PHP анализирует эту информацию и делает ее доступной в массиве с именем $_GET, в частности, в этой форме:

array(
    'profile_id' => 2
)

Сценарий profile.php теперь может считывать эту информацию, считывая $_GET['profile_id'].

Поскольку цитируемый вами Rails-маршрутизированный URI лучше подходит для SEO, получите следующий фрагмент информации: вы можете добиться маршрутизации, как в Rails, если используете .htaccess файл или эквивалент, который сопоставляет ваши URI с маршрутизацией на Rails с ресурсом profile.php.

Вы также можете использовать фреймворки для помощи.Ближайший эквивалент (в этом переходе к нему должен происходить естественным образом из-за используемых сопоставимых синтаксисов), о котором я знаю, было бы необязательно, если бы вы использовали Zend Framework Router .

1 голос
/ 23 апреля 2010

В Rails, когда веб-сервер получает запрос, веб-сервер «отправляет» запрос действию в контроллере. Как вы упомянули, как осуществляется диспетчеризация, определяется в таблице маршрутизация .

В простых проектах PHP входящий HTTP-запрос сопоставляется с представлением, в котором логика контроллера и базы данных смешана в одном файле. Без использования шаблона MVC вы, скорее всего, в конечном итоге получите дублированный код для аналогичных действий, потеряете гибкость (например, фильтрацию, предварительную или пост-обработку URL-адреса) или рискуете иметь ошибки и уязвимости в вашем коде.

0 голосов
/ 23 апреля 2010

Вы получаете то, что я спрашиваю.

Не совсем хорошо.

Как запрос отправляется на запрашиваемая страница.

Браузер отправляет /profile.php?profile_id=2 запрос на www.example.com хост

Как осуществляется маршрутизация в php

Точно так же.

list($controller,$blog,$id)=explode("/","/blog/show/123");
...