Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/13: Рейтинг темы: голосов - 13, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 12

Пишу свой роутинг

18.01.2019, 22:18. Показов 2647. Ответов 5

Студворк — интернет-сервис помощи студентам
Всем привет! Попалась вот такая задача, которую пока никак не получается решить.

Класс Router - отвечает за маршрутизацию, метод get() - используется для регистрации маршрута при http-запросе методом GET, по указанному адресу, второй параметр - callback функция или строка вида: Полное\Имя\Класса@названиеМетода - который будет вызван при прохождении по этому маршруту. Класс должен содержать метод dispatch - в котором будет определяться какой маршрут запрошен - и выполнять callback в случае совпадения

Что имеем:

индексный файл, в котором регистрируем маршруты и callback функции

PHP
1
2
3
4
$router = new \App\Router();
 
$router->get('/',     function() { echo 'home'; });
$router->get('about', function() { echo 'about'; });
Класс Router:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
namespace App;
 
class Router
{
    private $routes = [];
 
    public function get(string $link,callable $callback)
    {
        array_push($this->routes, [$link => $callback]);
    }
 
    public function dispatch()
    {
        foreach ($this->routes as $route)
        {
            if (key_exists($_SERVER["REQUEST_URI"], $route));
            {
                // TODO $route[$_SERVER["REQUEST_URI"]. что с этим делать?
            }
        }
    }
}
Далее нужно вернуть результат работы callback функции заданной для данного маршрута.

Как это сделать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.01.2019, 22:18
Ответы с готовыми решениями:

Пишу свой интерпретатор
Здравствуйте! Пишу что то вроде интерпретатора со своим синтаксисом и все такое) Нужна помощь в присвоении переменным значений.. Оставляю...

Пишу свой кликер
Доброго времени суток начну сразу с вопроса в лоб Есть такая штука getasynckeystate которая отслеживает вроде как нажатие кнопок. ...

Пишу свой калькулятор
Здравствуйте, сразу хочу написать, что только изучаю JavaScript, поэтому прошу быть в меру снисходительными к моему коду=)(на сколько это...

5
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
18.01.2019, 23:17
Лучший ответ Сообщение было отмечено ufowow как решение

Решение

Цитата Сообщение от ufowow Посмотреть сообщение
Как это сделать?
Видимо так:
PHP
1
2
$func = $route[$_SERVER["REQUEST_URI"]];
return $func();
Цитата Сообщение от ufowow Посмотреть сообщение
get('about'
Только надо учитывать, что в $_SERVER['REQUEST_URI'] будет '/about'.
1
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
18.01.2019, 23:21
Цитата Сообщение от Jodah Посмотреть сообщение
Только надо учитывать, что в $_SERVER['REQUEST_URI'] будет '/about
или даже /about?foo=bar
0
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 12
19.01.2019, 02:29  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
Видимо так:
Спасибо, это частично помогло.
Сейчас возвращается (return) object(Closure)#2.

Как сделать, чтобы выполнялось именно
PHP
1
echo 'home';
??
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
19.01.2019, 02:29
ufowow, вы точно сделали как я написал выше? return $func() со скобками?
0
0 / 0 / 0
Регистрация: 26.06.2014
Сообщений: 12
19.01.2019, 02:31  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
ufowow, вы точно сделали как я написал выше? return $func() со скобками?
прошу прощения за невнимательность, всё ок!

Спасибо огромное за помощь!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.01.2019, 02:31
Помогаю со студенческими работами здесь

Пишу свой первий сайт на PHP
Пишу свой первий сайт на PHP. Установиил Denwer 3, Adobe Dreamweaver CS3, Photoshop. Возникли такие вопроси вот например я зополнил БД,...

Пишу свой класс по работе с датой и временем
Вот код &lt;?php class TimePassed extends DateTime{ //класс объявляем и наследуем public function...

Посоветуйте, подскажите...пишу свой первый сайт
Уважаемые гости...Посоветуйте, подскажите...пишу свой первый сайт http://www.pefepat.narod.ru/ . Сайт еще в разработке, и чтобы встать на...

Как быть с расшифровкой, не расшифровывает, что делать? пишу свой шифр
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...

Роутинг
Всем привет. пытаюсь научиться nodejs. Приобрел VPS на centos 7. Приложение запустил через PM2 на порте 8077. Суть вопроса в чем: как через...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru