Звучит так, как будто вам нужно реализовать какой-то маршрутизатор.
Я сам с этим столкнулся, и вот как я сделал так, чтобы он работал довольно хорошо:
Некоторые классы маршрутизаторов анализируют URL,Он разбивает части URL (/en/controller/action/param1/paramval1/
) на части.Он определяет код языка (по умолчанию, если не указан), контроллер, действие и т. Д. Маршрутизатор также предоставляет информацию (контроллер, имена действий, параметры) для других частей системы, хотя вы можете реализовать специальный класс для этой цели (например, Запрос),
Теперь различные части системы имеют доступ к данной информации через класс Router или Request.С этого момента должно быть легко реализовать многоязычный сайт.
Еще раз, важная часть - это сопоставление URL с контроллером и действием.Определенно, если вам не нужен URL, такой как /controller/action/parameter1
, у вас должна быть некоторая таблица сопоставления (документ XML / таблица базы данных), которая сопоставляет заглушку (короткий тег страницы) с контроллером и действием.Именно маршрутизатор читает эту таблицу и определяет контроллер, действие и другие параметры на основе заданных правил.
Надеюсь, я не слишком усложнил:)
Обновление:
Что касается меня, я реализовал сопоставление с XML-файлом.Позвольте мне объяснить далее: маршрутизатор заботится о разрешении URL.Обычно ваш URL будет содержать имя контроллера и действия (в вашем случае страниц - это контроллер, view - это действие).
Теперь в вашем случае,вам нужна просто заглушка, поэтому маршрутизатор должен каким-то образом получить информацию о том, какой контроллер и какое действие вызывается.Это цель отображения, чтобы сопоставить заглушку с соответствующим контроллером и действием.
Я реализовал это как статические маршруты, записанные вручную в файл XML, но вы можете, например, использовать некоторый класс плагина, которыйпроверяет, действительно ли заглушка относится к странице.Если это не так, это может означать две вещи: это контроллер или запрос недействителен.
Позвольте мне поговорить о коллизиях: если заглушка совпадает с именем любого контроллера, вы столкнулись с коллизией,Стоит ли рендерить страницу с заданной заглушкой или вызывать контроллер?Это должно быть как-то решено, возможно, вы можете программно ограничить пользователя, чтобы иметь страницу с такими заглушками.
Кроме того, в следующий раз, когда вы погрузитесь в разработку приложений на PHP, я бы порекомендовал вам использовать некоторые хорошо известные фреймворки PHP (если вы еще этого не делаете, оф.), Например, Zend, Kohana или CodeIgniter.Все они предоставляют маршрутизатор и многие другие компоненты, которые делают разработку приложений намного проще, быстрее и безопаснее.