PHP

Есть тут гуру PHP которые знают толк в переборах массивов? (вопрос внутри)

Есть условный массив, в котором есть название функции и ссылка для запуска.
Логика работы.
Заходим на сайт, на главную, открывается главная.
Дописываем /login, бросает на login.
Дописываем в конце абаркадабру и видим ошибку 404.
Как сделать такое? Кусок кода вот:
public function display($routes) {
$path = $this->getRequestPath();
$callf = new RouterPaths();
foreach ($routes as $key => $value) {
//if ($path === $value) {
if ($routes[$key] == $path) {
if (method_exists($callf, $key)) {
$callf->$key();
} else {
echo 'ERROR: Фатальная ошибка, не найдена функция, выход.';
exit;
}
}
}
}

Я никак не могу прикрутить сюда функцию ошибки, foreach всё перебирает, и в итоге если я добавляю в любом условии else, elseif то дописывается 404 в конце, либо ничего не открывается (везде наоборот 404) кроме главной, а на главной в конце 404...
Сейчас в этом коде нет обработки линка, ну или пути, который не определён в массиве и у него нет функции.
Кирилл Селило
Кирилл Селило
3 440
...Дописываем /login и это уже не php, а сам web-сервер ищет подпапку login и пытается ее показать.
То, что вы хотите достичь, реализуется:
- либо указанием директив самому web-серверу;
- либо созданием подпапки login, а в ней скрипт, который кидает на вход в админку;
- либо видоизменением ссылки: посылать не на site.tld/login, а на site.tld?action=login, в этом случае все возможные (и невозможные) ссылки будут обрабатываться одним вашим обработчиком, где вы будете проверять, а не равно ли $_GET["action"] значению "login"? и если равно, то посылать в админку, а если не равно, посылать на сайт Диснея или на 404.

Второй вариант хорош тем, что все не "/login" сами будут автоматом 404. Но есть и минусы, скриптов будет более одного, их надо будет согласовывать и отлаживать совместно.
Сергей Филимонов
Сергей Филимонов
89 192
Лучший ответ
Кирилл Селило я роутер пишу, без единой папки
тамилиразныепотрараввызновызкрыногвьяныхмисокисамигагныйеприпро

Цо сом робишь? Цо впхашь? Грузд опан смердяка. Ми болит на х
О чем там?

суць интай в цвай зизу
Макс Шолохов
Макс Шолохов
13 762
Кирилл Селило Японский городовой, а по-русски можно?
Александр Самарцев Ты спросил бредовее чем я, можешь по-подробнее?
Это MVC. Например, у меня при http:// name/posts/2 будет выведена 404 или, если пост есть, его контент и т. п.
Почитав твои комментарии под ответами я понял, что ты пишешь маршрутизатор, т. е. работаешь с MVC, например мой роутер (github.com/Pavel122/solar-framework/blob/master/vendor/core/Router.php) работает благодаря двум правилам htaccess, которые перенаправляют всё в public/index.php, где анализируются данные и подгружается соответствующий контент.

Твой код подправить не могу, ибо понятия не имею, как выглядит класс RouterPaths и всё такое. Залей свой код на гитхаб.
Кирилл Селило Там только имена функций с кодом echo 'main'; и только
Кирилл Селило Слил)
(github.com/XrTV/xcode-cms)
Ошибочно
Ты спросил бредовее чем я, можешь по-подробнее?