Веб-маршрутизація в php з r

Кожен зацікавлений в сумісності SEO, REST-style URL. Apache може зробити маршрутизації URL за допомогою правила mod_rewrite. але це дуже складно і значною кількістю помилок. Чому б не використати PHP який сам впоратися маршрутизації, а?

Вимоги і установка

Aura.Router потрібно PHP версії 5.4 +. Ви можете встановити його у багатьох відношеннях:

  1. Завантажити як tar ball або ZIP з GitHub.
  2. Якщо ви використовуєте Git, скачайте його через командний рядок з:

Як тільки ви завантажили Aura.Router, ви побачите каталог з файлової структурою нижче:

Всі вихідні файли лежать в каталозі src. а звідти слід PSR-0 Standard для автозавантаження. Всі модульні тести знаходяться в каталозі tests. ви можете запускати тести, посилаючись на PHPUnit всередині каталогу tests (тільки переконайтеся, що у вас встановлений PHPUnit).

Робота з Aura.Router

Мінімальний набір правил mod_rewrite повинні бути написані в. htaccess вказати вхідні запити в одну точку входу.

Наведені вище правила перевірки для існуючих файлів і директорій і вказати всі інші запити до index.php.

Або, якщо ви використовуєте PHP, побудований в сервер, ви можете запустити щось на кшталт такого:

Aura.Router містить чотири файли в src / Aura / Router маршрутизатор папку: Map.php. Route.php. RouteFactory.php і Exception.php. RouteFactory є фабрикою класу, щоб створити новий об'єкт Route. RouteFactory містить метод newInstance (). який приймає асоціативний масив. Значення передаються в конструктор класу Route.

Об'єкт Route являє собою індивідуальний маршрут з ім'ям, шлях, параметрами, значення і т.д. Ви ніколи не повинні використовувати екземпляр Route безпосередньо, замість цього ви повинні використовувати RouteFactory або карти.

Route і RouteFactory приймає асоціативний масив з наступними ключами:

  • name - рядок, яка є назвою маршруту.
  • path - це рядок, яка є шляхом для цього маршруту з наповнювачами параметрів маркера.
  • params - масив з параметрами, які відображають маркери регулярної подмаскі.
  • values ​​- масив значень за замовчуванням для параметрів, якщо вони не знайдені.
  • method - цей рядок або масив методів HTTP, сервер REQUEST_METHOD повинен відповідати одному з цих значень.
  • secure - будь то сервер повинен використовувати запит HTTPS.
  • routable - якщо це правда, цей маршрут може бути узгоджений, а якщо немає, то можна використовувати тільки для створення шляху.
  • is_match - викликається, для оцінки маршруту.
  • генерувати - викликається, для створення шляху.
  • name_prefix - рядок префікс для імені.
  • path_prefix - рядок префікс шляху.

Не турбуйтеся надто багато про метод params. Нижче кілька прикладів.

Карта класу колекції точки URI маршрутів. Map's конструктор приймає RouteFactory і ваші маршрути в одному масиві прихильності групи. Це дозволяє відокремити конфігурацію і будівництво routes (маршруту).

Ви можете додати індивідуальні маршрути для Map об'єкта через його метод add (). або прикріпити ряд маршрутів з використанням методу attach (). Який би спосіб ви не додавали до маршруту, маршрут все характеристики зберігає в map (карті) definitions property, яке є масивом.

основи використання

Найпростіший спосіб створення екземпляра карти об'єкта потрібно файл instance.php знаходиться в каталозі сценаріїв.

Крім того, можна створити об'єкт вручну, що саме те, що instance.php скрипт робить в будь-якому випадку.

Далі, необхідно додати маршрути до об'єкта, використовуючи свої метод add ().

Метод add () приймає назву маршруту, шлях і асоціативний масив. Як я згадував раніше значень містить значення за замовчуванням в параметри масиву. Таким чином, в прикладі для маршруту "read", ви можете побачити формат за замовчуванням завжди "HTML", якщо він не заданий.

Ви ставите питанням, чому ми повинні використовувати формат за замовчуванням? Для REST-як додатки, контролер і дію буде таким же. Надання даних відрізняється від прийнятого формату. Таким чином, ми не повинні повторити той же самий код від однієї дії до іншого. Розглянемо, наприклад, URI:

Дані, необхідні для виходу для кожного, але в різних форматах, таких як JSON, HTML, і атом. Так що, якщо жоден з форматів з'явиться, наприклад:

Потім він візьме на себе запит на HTML.

Для реального API REST, розширення файлу не повинен використовуватися, щоб вказати потрібний формат. Клієнтам слід заохочувати до використання прийняти запит HTTP-заголовка.

узгодження маршруту

Після того, маршрути, які були додані, ви хочете, дізнатися, який шлях був запитаний користувачем. Це можливо за допомогою методу match () map об'єкта. Усередині карти об'єкта виклик методу IsMatch () Route об'єкта. За методом match (). ви повинні пройти шлях і $ _SERVER значення, як показано нижче:

Можливо, ви задавалися питанням, чому ми повинні пройти шлях, а також на сервері значення. Чому не можна отримати Aura.Router сам шлях з масиву $ _SERVER ви пройшли? Це для певної гнучкості.

Якщо збіг знайдено, метод повертає екземпляр об'єкта Route. в іншому випадку він повертає false. Після того як ви отримали об'єкт, який ви можете отримати доступ до його значенням як такої:

Це від значення $ route-> values ​​ми знаємо, які рендеринга, який клас, який метод ми хочемо викликати до диспетчеризації.

диспетчеризація маршруту

Якщо маршрут не знайдений, то ви легко зможете створити об'єкт контролера з відповідного методу. Цей простий приклад взятий з документації Aura:

Micro Framework-маршрутизації

Іноді ви можете використовувати Aura як мікро-структури. Це також можливість присвоєння анонімної функції контролера:

При використанні Aura.Router як мікро-структура, тоді диспетчер буде виглядати наприклад наведеному нижче:

Створення маршруту шляху

Ви можете створити маршрут на вашу думку. Це можливо за допомогою карти методу generate () всередині викликає метод generate () об'єкта Router.

Коротше набравши "blog / read / 42.atom". але жорстко, шляхи є менш гнучкими і маршрут змінити складніше. Розглянемо наступний приклад:

Що станеться, коли ви захочете змінити / blog / read / 42.atom к / article / view / 42.atom. Або, що трапиться, коли клієнт хоче перейти до багатомовному веб-сайту? Якщо у вас є жорстко запрограмовані шляху, можливо, доведеться змінити їх в багатьох місцях. Метод generate () завжди попадеться під руку.

Другий аргумент методу add () є асоціативним масивом. Ви можете передати викликаються функцій з ключів is_match. які можуть або повернути true або false. І в залежності від значення, якщо він поверне маршрути, коли метод match (). наприклад:

Ось якщо HTTP_REFERER є example.com ми не зможемо завантажити контент. Ви можете передати ваші власні викликаються функції, як і вище. Це робить Aura.Router більш гнучким.

висновок

У цій статті ми розглянули деякі базові та розширені можливості використання Aura.Router для веб-маршрутизації.

Закзать шаблон для Amiro CMS по інтернету.
- - - - - - - - - - - - - - -