Маршрутизація на сайті засобами php

Давайте поговоримо про цікавих полезностях, які рано чи пізно стануть в нагоді будь-якому web-developer`у.

Почнемо з роутинг (eng. "Routing" - маршрутизація). Відразу ж постає питання, навіщо ж потрібна на сайті маршрутизація, якщо і раніше все добре працювало і влаштовувало? Все просто. Якщо ви хочете отримати більш гнучку систему і зменшити час на настройку / перенастроювання сайту, то маршрутизація вам необхідна. До того ж централізоване управління сайтом спростить роботу з кодом.

Коли то я сам користувався звичайною switch-case маршрутизацією і думав, що це зручно (насправді навіть така маршрутизація куди краще, ніж її відсутність).

Все це було на старому функціональному php навіть без будь-якого натяку на ООП. Такого роду система виходила дуже не гнучкі, тому що виникали проблеми в передачі даних в модулі, код був дуже громіздким, так як доводилося тримати логіку разом з маршрутизацією, а потім мене осінило - чому б не зробити наступне:

  • 1) маршрутизацію без коду помістити в окремий файл (це дозволить вільно редагувати файл прямо через адмінку)
  • 2) помістити логіку окремо в клас, який би займався генерацією контента для сторінок

У цій статті багато хто не знайдуть будь-якої новизни, але я не прагну вводити інновацію, я просто хочу відкрити очі тим, хто ще спить і користується менш зручними способами :)

Визначилися «навіщо?», Перейдемо до «як?».

Перший крок, який нам потрібно зробити, для створення зручної й практичної маршрутизації - записати наступний код в. htaccess:

Цей код перенаправить обробку всіх сторінок на index. php, що дасть нам можливість спростити управління контентом. Для збільшення розуміння раджу звернути увагу на статтю DarkKemper`a

Тепер, коли у нас є перенаправлення, перейдемо до створення файлу-маршрутизатора. Я користуюся xml-форматом, але це не особливо важливо, головне, що б вам було зручно.

  • packageName1. ClassName / MethodName
  • packageName2. ClassName / MethodName
  • packageName3. ClassName / MethodName

Все досить просто: в файлі-маршрутизатор ви можете вказувати настройки як для окремих URL, так і для будь-яких статичних частин сторінок. У прикладі я вказав модулі для шапки сайту, так як вона у мене не змінюється. Зауважу, що крім модулів, ви можете вказувати настройки, будь-які передаються параметри, правила ... Загалом все, що завгодно.

Останній і найважливіший крок - пишемо клас Router, який і буде завідувати всієї маршрутизацією.

Для початку нам потрібно розібрати xml-файл:

  • private static function parse ($ configPath)
  • return simplexml_load_file ($ configPath);
  • >

Метод parse () отримує шлях до вашого конфігу (можна використовувати не тільки для маршрутизації) і повертає SimpleXML object.

Тепер ви можете звертатися до будь-яких налаштувань наступним чином: $ xml-> header-> modules ...

  • public static function GetContent ($ configPath)
  • $ Content = '';
  • $ Router = self :: parse ($ configPath);
  • foreach ($ router as $ page)
  • if (preg_match (
  • '# ^'. $ Page-> uri. '$ #'
  • . str_replace ($ _SERVER [ 'QUERY_STRING'], '', $ _SERVER [ 'REQUEST_URI'])
  • . $ uriParts
  • )
  • )
  • if (. empty ($ page-> modules-> module))
  • foreach ($ page-> modules-> module as $ modul)
  • $ PageModules = $ modul;
  • // Modul :: Load () займається завантаженням пакетів з .
  • $ Content. = Modul :: Load ($ modul, $ uriParts [1]. $ UriParts [1]);
  • >
  • >
  • >
  • >
  • // в своєму конфігу я створив групу "page404", яка обробляється, якщо для даної сторінки не задані модулі
  • if (empty ($ pageModules))
  • foreach ($ router-> page404-> modules-> module as $ modul)
  • $ PageModules [] = $ modul;
  • $ Content. = Modul :: Load ($ modul);
  • >
  • >
  • return $ content;
  • >

Отже, для початку ми Парс xml-файл, після чого обробляємо регулярним виразом рядок з ... .

Якщо ми знаходимо відповідність з URL поточної сторінки, то підключаємо модулі, зазначені в файлі-маршрутизатор. Якщо не знаходимо - то підключаються модулі 404 сторінки.

Ну от і все. Нічого складного тут немає.

Висновки можна зробити такі:

  • + Система дуже проста,
  • + Легко і швидко можна змінити сторінки і розділи до невпізнання,
  • + Завдяки регулярними виразами можна легко зв'язати модулі (ми можемо передавати в них параметри).
  • - Якщо ваш файл-маршрутизатор великий, то без кешування краще не працювати.

Маршрутизація на сайті засобами PHP

Коли то я сам користувався звичайною switch-case маршрутизацією і думав, що це зручно (насправді навіть така маршрутизація куди краще, ніж її відсутність).

Розширення DOM в Prototype

Більшість розширень DOM містяться в об'єкті Element. Methods і додатково копіюються в об'єкт Element для зручності використання.

Покращуємо блог за допомогою jQuery

Вважайте це третьою частиною "симбіозу jQuery і WordPress".

JSR 292 Review Ballot

Дана специфікація покликана вирішити проблему мов з динамічною типізацією, таких як PHP, Perl, Python при реалізації їх на Java платформі (мається на увазі JVM).

Схожі статті