Микроблог Гиша

2.69K
.
Windler
NaN is number
Запилил я тут короче роутер небольшой.
Быдлокодный, походу.
Ну, собственно то, что я и хотел.
То есть ссылки типа /forum/thread/2281337
Он будет видеть и передавать это в массив self::$vars[], как
'forum' => '2281337'
В общем, докапайтесь до чего-нибудь здесь и обзовите меня плохими словами.
class Router
{
    public static $route = '';
    public static $vars = array();

function __construct () {

if (!empty($_GET['route'])) {
$url = explode('/', trim($_GET['route']));
$count = count($url);
$i = 0;
foreach ($url as $arr) {
if (is_numeric($arr)) { 
$key = $url[$i - 1];
self::$vars += [$key => $arr];
unset($url[$i]);
} else
self::$route .= $arr.($count - 1 < $i ? '/' : '');
$i++;
}
if (file_exists(PATH.self::$route.'.php'))
require_once (PATH.self::$route.'.php'); elseif(is_dir(PATH.self::$route))

require_once (PATH.self::$route.'/index.php'); else {
header('Location: /404.html');
exit; }
} else return false;

}
}
.
код - мясо
.
NaN is number
# ramzes (16.04.2016 / 00:55)
код - мясо
При всем ужасе этого кода, он выдает 0.001.
.
Windler, 1. Ужасное форматирование. За такое надо отрубать руки. Мало того, что оступы не расставлены, так ещё и фигурные скобки для управляющих конструкций не везде расставлены, что очень затрудняет чтение. Никогда больше так не делай. Если не жалеешь других, то пожалей хотя бы себя, чтобы когда ты вернулся к этому коду спустя какое-то время тебе не стало стыдно и не хотелось хвататься за голову.

2. Зачем тебе здесь понадобился класс, когда можно спокойно решить задачу без него?

3. Раз уж решил использовать класс, то почему ты используешь статические поля?
Можно предположить, что доступ к данным будет проще. Не нужно обращаться к экземпляру, а можно напрямую к классу. Но это худшее, что можно только придумать. Словом, уродливо, некрасиво и самое главное, это источник потенциальных ошибок. Если не конкретно в этом случае, так в любом другом.
По сути у тебя получились этакие глобальные переменные, завернутые в пространства имён в виде классов.

4. Я конечно не хочу тебя сейчас слишком грузить, но в современном PHP принято использовать абстракции над суперглобальными переменными. Почитай про PSR-7 или Symfony/HttpFoundation. Это так на будущее. Сейчас это необязательно.

5. Никогда не делай header('Location: <url>'); exit; Тем самым ты ставишь крест на расширении своего приложения. Короче, я рекомендую тебе придумать алгоритм, по которому будет работать обработка запроса, начиная от получения данных из запроса, заканчивая отправкой ответа. Должна быть единая точка входа и единая точка выхода, что позволит в будущем очень легко реализовать всяческие хотелки без необходимости перелопачивать сотни файлов и копипастить одно и тоже.
Можешь посмотреть, как это сделано в микрофреймворках, чтобы было легче понять, о чём речь и вообще как решать эту задачу.

Ну и последнее: Нахрена ты возвращаешь false в конструкторе? RTFM.
.
NaN is number
# reaper (16.04.2016 / 01:08)
Windler, 1. Ужасное форматирование. За такое надо отрубать руки. Мало того, что оступы не расставлены, так ещё и фигурные скобки для управляющих конструкций не везде расставлены, что очень затрудняет
Спасибо за конструктивный ответ.
1. Ну, форматирование не такое "ступороное", как показал джон
2. Класс и вправду бесполезно - решил просто передавать все запросы отдельному файлу и там обрабатывать.
3. Учту.
4. Спасибо за библиотеку, прочту.
5. Привычка с 2012-го.
6. А вот это уже заметил сам и убрал.
Еще раз спасибо
.
NaN is number
Я просто оставлю это здесь.
Прикрепленные файлы:
.
class core {
...

$url = $router->getRequest(); //предположительно роутер настроен ранее
...
думаем, решаем, обрабатываем
...
require ($url); //по хорошему не тут, не суть, отдаем где то там

....
}
___
убери из класса подключение логики, пусть он только отдает путь к исполняемому файлу, который подключать будет основная логика или даже ресурс отвечающий за вывод в браузер (по вкусу)
главное убери из класса, иначе он теряет всякий смысл
.
NaN is number
# ramzes (16.04.2016 / 01:55)
class core {
...

$url = $router->getRequest(); //предположительно роутер настроен ранее
...
думаем, решаем, обрабатываем
...
require ($url); //по хорошему не тут, не суть, отдаем где то там

Я класс в целом убрал.
Теперь просто на отдельный файл вся инфа кидается и он уже сам решает, что ему делать и какие файлы крепить
.
NaN is number
Вы думали я снова умер?
Ага, не тут-то было.
Текущий месяц для меня был методом проб и ошибок. А именно методом поиска годных статей с новыми метами в разработке web приложений.
Прочитал я вам скажу много чего - в школе столько не читал.
Собственно начинаю делать небольшой проект (нет, большой).
На довольно таки специфическую тематику, с которой я с вами естественно не поделюсь
За основу решил взять Laravel (ибо красиво, просто и удобно как по мне).
Ближайшее время не чего писать сюда не буду (как и обычно), но как найдется свободная минутка, я конечно же дам о себе знать (даже при том условии, что я не кому здесь не нужен).
До встречи.
.
Rakovskiy
The Fast, Secure and Professional - Yii2
Windler, Перед тем как обращаться к элементу массива проверяй его наличие.

if (isset($_GET['route']) && !empty($_GET['route']))


Потому, что будет "notice undefined index" если нет такого индекса в $_GET
Всего: 63