Сергей Шлоков

Сергей Шлоков

С нами с 31 января 2013; Место в рейтинге пользователей: #11
Сергей Шлоков
Вчера в 13:15
0
На здоровье! Если сайт нагруженный, то необходима SQL оптимизация с такими запросами.
Сергей Шлоков
Вчера в 12:27
+1
Не хочу никого обидеть, но это пример обычного говнокоддинга. Человее не знает про безопасные запросы, не умеет работать с xPDO, зачем-то выставляет плейсхолхолдеры, хотя метод getChunk вторым параметром принимает массив плейсхолдеров. Видимо начинающий. Тут переделать дело 10 минут. Думаю, найдётся кто-нибудь свободный.
Сергей Шлоков
Вчера в 11:33
0
Мама рОдная. Я бы этому программисту уши бы поотрывал. Уберите хотя бы ссылку на сайт пока не залезли.
Сергей Шлоков
Вчера в 07:40
1
+1
Можно написать в другом формате
'select' => '["MedPred.*, COUNT(profile.id) as `users`, COUNT(IF(get_upload_count(profile.internalKey) > 0, 1, NULL)) as `uploads`"]'
В таком формате xPDO вставляется без обработки.

П.С, Это json массив с одной строкой.
Сергей Шлоков
17 октября 2019, 07:43
+2
[[+publishedon:strtotime:add=`3600`:date=`%a, %d %b %Y %H:%M:%S +0400`]]
Сергей Шлоков
13 октября 2019, 23:01
0
Мы раньше вроде были на «ты». Я так постарел?

Обрати внимание на метод $app->run();
В нём вызываются конкретные классы. Причем, если не указан конкретный реквест, то он определяется автоматически по установленным пакетам (я выше писал).

Но признаюсь, синтаксис в slim4 мне сложноват, он прям на полную использует все нововведения седьмых версий php
А мне безумно нравится. В пекло PHP 5. ))

Я на данном этапе решил, что методы из интерфейса psr-7 (и psr-15 ) вшиты в сам php.
Найн. Ю а ронг.
Сергей Шлоков
13 октября 2019, 19:36
0
В комментарии это не обьяснишь. Попробуй почитать тут. Но ты как-то широко шагнул. Сначала нужно базовые знания получить, а потом усложнять.
Интерфейсы дают малую связанность. Т.е. ты можешь подсунуть в метод любой класс, соответствующий определенным требованиям. За это как раз и отвечает интерфейс.

Но где прописана реализация этих методов из стандарта psr-7?
У того же Slim эти классы пробрасываются при инициализации приложения. В нем жестко прописана проверка наличия нескольких пакетов. Сначала свой пакет, потом Guzzle и ещё какие то. Не помню. Но можно и самому инстанциировать любой свой класс запроса или ответа. Главное, чтобы соответствовал интерфейсу. Иначе будет ошибка.

Есть фреймворки. строго следующие этим стандартам. К примеру Slim.
Тройка ещё не соответствует. Например, $response->toJson() не соответствует стандарту. А вот четверка поддерживает почти все текущие утвержденные стандарты. После тройки приходится привыкать. И всякие методы обработки запроса и ответа выносить на сервисный уровень.
Сергей Шлоков
05 октября 2019, 10:08
0
Это не претензия. Просто пример одной из возможных реализаций. Можно и так и эдак и по всякому.
Сергей Шлоков
05 октября 2019, 09:57
+1
Мысли в воздух.
Не обязательно расширять сервис ради проверки прав. Мы можем сделать любую проверку самостоятельно
// Вместо этой проверки
if (!$rest->checkPermissions()) {
    $rest->sendUnauthorized(true);
}
// Пишем свою 
if (!$modx->hasPermission('some_permission')) {
    $modx->sendUnauthorizedPage();
    // echo json_encode(['success' => false, 'message' => 'Permission denied.']); exit;
}
Сергей Шлоков
05 октября 2019, 09:38
+1
Следуя парадигме современной разработки, использовать папку model нужно только для моделей. Т.е. класс модели xPDO, схема и мап-файл. Остальному там не место.
Сергей Шлоков
04 октября 2019, 14:11
0
Уберите у 404 страницы из футера форму обратной связи.
Сергей Шлоков
29 сентября 2019, 22:31
+3
REST — это архитектурный стиль. А RESTful API — это реализация этого стиля.
Правильно говорить именно RESTful API, но в народе уже прижилось неправильное название REST API.
Сергей Шлоков
29 сентября 2019, 19:56
+1
Возможно автор топика дальше раскроет тонкости проверки прав, но в этом топике не сделал акцент, что вот за этим
// Проверяем, что пользователю предоставлены необходимые права доступа;
// Бьем по рукам и Возвращаем пользователю ошибку 401 ежели чего
if (!$rest->checkPermissions()) {
    $rest->sendUnauthorized(true);
}
ничего не стоит, хотя комментарий вселяет уверенность, что проверка есть. А если заглянуть в код этого метода, то увидим следующее
public function checkPermissions() {
    return true;
}
Новички могут попасть.
Сергей Шлоков
29 сентября 2019, 18:07
0
Никак ни с токен-авторизацией, ни с какой другой. Есть всего один абстрактный контроллер, который нужно наследовать. Поэтому разработчику придётся всё писать самостоятельно.
Сергей Шлоков
29 сентября 2019, 15:01
0
Не так. Системная настройка отвечает за множественный вывод как и раньше. А вот новая галочка у ресурса позволяет убрать URL этого ресурса из урлов дочерник элементов. Т.е. если если у ресурса parent2 убрать этот чекбокс, то урл дочернего документа c урлом parent1/parent2/child1 он будет такой — parent1/child1.
Сергей Шлоков
28 сентября 2019, 08:16
+1
Modx обновлен до последней версии, но в ресурсе так и не появилось новое поле «Использовать псевдоним в пути псевдонимов»
Ctrl-F5. Но этот чекбокс имеет значение только, если включена настройка «Использовать вложенные URL».

Попробуй очистить кэш.
Сергей Шлоков
27 сентября 2019, 19:58
+2
Ну если бэкэндщику хочется всё писать с нуля, вместо использования готовых js библиотек, то да, это прекрасно.
Сергей Шлоков
27 сентября 2019, 19:19
0
Ну так это только в трешке появится. Так что не используется.
Сергей Шлоков
27 сентября 2019, 14:39
+7
Так колесо прогресса собственно и тянется к Blazor подобным фреймворкам.
Думаю, даже в Microsoft так не думают. Пока ИИ не придумает удобную замену яваскрипту, последний будет только набирать популярности.