Создание фреймворка. Класс Router. Урок 2

Создание фреймворка

От автора: приветствую вас, друзья. Продолжим создание собственного PHP фреймворка. По итогу мы должны получить вполне функциональное решение, а заодно познакомиться с принципами работы современных PHP фреймворков. В этом уроке мы в целом завершим писать класс Router, который будет отвечать за маршрутизацию во фреймворке. Также мы напишем черновой вариант функции автозагрузки, которая избавит нас от необходимости подключать каждый класс и будет делать это за нас.

скачать исходникискачать урок

В видео версии урока вы найдете ответы на такие вопросы:

Как использовать регулярные выражения для маршрутизации?

Практический курс по созданию веб-приложения на PHP & MySQL с нуля!

Изучите курс и создайте ваше первое приложение на PHP всего за 3 дня!

Изучить курс

Именования и стандарты PSR?

Чем может быть полезен стандарт комментирования PHPDoc?

Как написать функцию автозагрузки классов?

Как описать кастомное правило маршрутизации?

Разработка веб-приложения на PHP

Создайте веб-приложение на PHP на примере приема платежей на сайте

Получить

Метки:

Похожие статьи:

Комментарии Вконтакте:

Комментарии Facebook:

Комментарии (8)

  1. Денис

    Здравствуйте. Это не предложение и не утверждение, а просто вопрос: Я понимаю, что domain.ru/controller/action это классика жанра, но все сеошники в один голос говорят не так.

    domain.ru/category/subcategory/article так полезно для продвижения инфо сайтов. Кстате у вас на страницах слово category в url вредно.

    Может стоит писать приложение сразу под SEO?

    • Андрей Кудлай

      Здравствуйте.
      Я не сеошник, конечно, но из практики могу сказать, что URL — это один из последних факторов, влияющих на ранжирование, и влияние его фактически стремится к нулю. В любом случае, никто не мешает организовать нужную структуру URL, написав соответствующие правила маршрутизации — это не проблема. Зашивать изначально указанную Вами структуру, как мне кажется, нецелесообразно, поскольку для кого-то может потребоваться обратное — убрать подкатегорию и даже категорию. Да и противоречит все это классике, как Вы и отметили. Все фреймворки реализуют именно такую структуру URL, но позволяют гибко ее менять. У нас все это также можно реализовать через правила маршрутизации. Так что все в руках ваших.
      И да, мы сейчас пишем не приложение (не сайт), мы создаем фреймворк, т.е. инструмент для написания приложения. После создания данного инструмента уже можно подумать над созданием сайта на созданном фреймворке.

  2. Денис

    Здравствуйте подскажите при таком роуте ‘^search/(?P.+)/?(?P.+)?$’ такой урл http://script.local/search/запрос/23 не дает переменную pageToken почему?

    • Андрей Кудлай

      Здравствуйте. Потому что для кириллицы в юникоде нужен модификатор u в шаблоне регулярного выражения, чтобы многобайтовая строка обрабатывалась корректно. В методе Router::matchRoute добавьте его:
      if(preg_match("#$pattern#iu", $url, $matches))
      А вообще, я бы поменял запрос для поиска на общепринятый, с get-параметром: site/search?запрос — в этом случае не придется и с маршрутами мудрить.

  3. Денис

    Дошло до меня из формы через urlencode русские буквы не обрабатываются с английскими символами проблем нет '^search/(?P.+)/?(?P.+)?$' => ['controller' => 'Sample', 'action' => 'Search']

  4. Денис

    Так заработало urldecode(rtrim($_SERVER['QUERY_STRING']), ‘/’)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree