Итак, цитата из документации. Они утверждают:
A much better solution is to use a front controller: a single PHP file that handles every request coming into your application.
Аргументируя это тем, что-де каждый файл должен выполнять одни и те же действия для инициализации: подключать библиотеки и так далее:
There are several problems with this approach, including the inflexibility of the URLs (what if you wanted to change blog.php to news.php without breaking all of your links?) and the fact that each file must manually include some set of core files so that security, database connections and the «look» of the site can remain consistent.
Через пол-страницы они предлагают использовать mod_rewrite для украшения урлов:
Using Apache's mod_rewrite (or equivalent with other web servers), the URLs can easily be cleaned up to be just /, /contact and /blog.
Итак, предлагается свернуть разные пути в один, а потом снова, уже на PHP, их различать и обрабатывать по-разному.
А ведь я мог сделать три файла /index.php, /contact/index.php и /blog/index.php и получить то же самое, зато по сравнению с подходом Symfony я:
- свалил бы всю маршрутизацию на веб-сервер — мне вообще не придётся делать её на PHP, дополнительно она стала бы быстрее
- не стал бы настраивать рерайтер, который неудобен в настройке, кроме того, тоже скорости не добавляет
- смог бы легко без лишних условных конструкций пропускать для отдельных точек входа необязательные шаги, например, анализ строки параметров запроса для статических страниц
- отдельные модули, представленные в данном случае в виде отдельных точек входа, оказались бы связаны слабее, что означает, что взаимное влияние меньше, проще адаптация, обновление и т. д.
это то, что сообразил навскидку.
То есть, я использую больше давно проверенного и более простого кода, а получаю в общем то же самое.
При этом, гибкость не уменьшается. Нет никакой разницы, каким именно способом я настраиваю урлы: в магическом файлике добавляю магические строки, или же создаю директории и в них кладу магические файлики. Если мне нужно сменить урлы так, чтобы старые работали, никто не мешает мне для решения этой ненормальной задачи всё-таки задействовать рерайтер.
По поводу «одинаковой иницизацизации» я тоже не согласен с аргументами: в этих ваших единых контроллерах всё равно приходится использовать магию типа «включение библиотек, анализ запроса, вывод ответа». Чем это отличается от строки «включить стандартную инициализацию» в отдельных точках входа?
Я думаю, вопрос на самом деле касается не только Symfony — ведь все так делают — от Joomla до Dokuwiki. Объясните, чем это один фронт-контроллер настолько лучше, что используют его, несмотря на очевидные преимущества отдельных точек входа?