Aleksei
Pavel
Pavel
Реклама платная
Ильхом
Ильхом
😂😂
Nikita
rest для modx на slim это конечно божественно. крайне удобный фреймворк
Nikita
Nikita
пара часов и можно забыть об админке
Gray
Nikita
Nikita
почему модх рест не пошел?
важна была скорость, все крутится на sql без pdo и тд. ибо искать и разбираться в rest модкса + писать процессоры по его патерну намного дольше
Nikita
и насколько я помню там нет get/post/patch/delete с кодами ответа сервера
Nikita
use \Psr\Http\Message\ServerRequestInterface as Request;
use \Psr\Http\Message\ResponseInterface as Response;
require '............/autoload.php';
define('MODX_API_MODE', true);
require $_SERVER["DOCUMENT_ROOT"].'/index.php';
$app = new \Slim\App;
$app->get('/v1/__table__/{id}', function (Request $request, Response $response, array $args) use ($modx) {
$id = $args['id'];
$result = $modx->_functions->SQL("SELECT * FROM `__table__` WHERE id = $id");
return $response->withJson($result);
});
вот и весь рест
Gray
могу ошибаться, https://github.com/modxcms/revolution/blob/bc5864c461a8f14755436298f67aeacac3643642/core/model/modx/rest/modrestservice.class.php#L550 разве это не то что надо?
Разбираюсь сейчас с этой темой и в общем-то тоже ищу средства облегчения задачи, т.ч. твой опыт прям как по заказу)
Nikita
https://docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/developing-rest-servers
Nikita
class MyControllerItems extends modRestController {
public $classKey = 'ToDoItem';
public $defaultSortField = 'sortorder';
public $defaultSortDirection = 'ASC';
}
мне крайне не нравится такой паттерн
Nikita
ибо вот так куда легче и красивше
Nikita
Nikita
естественно если это public api то нужны всякие проверки токена, проверки на inset/update и sql
Nikita
но тут апи закрыто + проверка токена + админка на реакте на закрытом через nginx адресе
Nikita
есть еще lumen, но он че-то не захотел ставится или много зависимостей тянул, поэтому на слиме все быстенько собрал
Gray
на счет заморочки с моделями согласен, хотя когда все уже есть не сильно напряжно
и согласен, когда все в одном месте поудобнее будет
Nikita
ну и слим максимально похож на express для nodejs, не надо разбираться как что работает
Nikita
если надо скину этот пример + $modx->_functions хелпер (кто-то на форуме сделал похожую штуку, но этой я не делился)
Nikita
modHelpers, вот
Gray
спасибо за своевременность) будет о чем подумать
Gray
если не сложно, было бы здорово
Gray
тут видимо больше с самим слимом надо разбираться?
Nikita
https://gist.github.com/but1head/23afb7c8d36f0956d9f27084a86d9d64
Максим
ну в доках же всё
Например, где? Мне нужно вот так WHERE $var IN(column_name), а не как в доках WHERE column_name IN($var). Или можно вот так WHERE FIND_IN_SET($var, column_name)
Nikita
ну в целом в хелпере все insert, select, update, delete
Nikita
и modx как таковой тут не нужен особо, но мне надо было чистить кэш и тд, для этого $modx доступен в роутере
Gray
спасибо!
Anonymous
Anonymous
а еще в тему есть такая штука у Джейсона https://github.com/opengeek/modslim
Dmytro
Anonymous
ну он просто работает
Anonymous
что там добавлять то?
Anonymous
у меня код репозитория пакетов для modx тоже уже пару лет как не обновлялся, но при этом работает в продакшене исправно до сих пор
Gray
по сути использование модх рест нужно в первую очередь для подтягивания модели модх (или компонентов) со всеми вытекающими?
а без такой необходимости можно плясать как угодно
Anonymous
да всегда можно плясать как угодно, но в MODX Rest - там это уже сделано и пользоваться попросту проще
Максим
ПИсал уже сегодня, может кто-то знает, как в сниппете pdoTools написать условие where
Максим
Мне нужно вот так WHERE $var IN(column_name), а не как в доках WHERE column_name IN($var). Или можно вот так WHERE FIND_IN_SET($var, column_name)
Вот так не прокатывает ["{$var}:IN" => ['column_name']]
Gray
справедливости ради - MODX Rest без проблем запустился буквально за пару минут, как раз по тем самым докам, но иные подходы тоже интересно попробовать
Василий при переделке modx.pro для роутинга использует nikic/FastRoute, чем не основа для REST?
Gray
Gray
А что делать, если не получается указать нужное нам уловие при помощи массива для xPDO? Тогда нужно указывать массив с одной строкой с чистым SQL:
&where=`["
TVimage LIKE \"%yandex%\" OR (TVfile.value = 1 AND TVtext.value != \"\")
"]
Максим
Gray
фигурные скобки не нужны и скорее всего должно быть что-то вроде
'where' => [$_modx->resource.id~" IN(modUserProfile.resource)"]
Максим
Максим
П.С. как ты код вставляешь?
Gray
тройной обратный апостроф ` в начале и конце
Gray
можно еще так попробовать
'where' => ["" => [$_modx->resource.id~" IN(modUserProfile.resource)"]]
Gray
а вообще, раз такие сложности, легче сниппет изменить как надо
Максим
Максим
Но если id 35, то это подходит и для 355, и для 3555
Максим
может какой-то есть способ другой проверить в ячейке виде
123,123,123
наличие определенного числа?
Aleksei
Максим
Aleksei
оператор IN ищет значение в массиве
Gray
что вообще сделать хочется?)
Aleksei
вот я это имел в виду
Aleksei
modUserProfile.resource это что?
Максим
Aleksei
ну
Aleksei
как ты в названии столбца собрался искать число?
Aleksei
кстати у профиля нет такого столбца, если только ты его сам не добавишь
Максим
что вообще сделать хочется?)
в БД забиваются id ресурсов через запятую, т.е. строка "123,12334,3453". Нужно проверить, если id текущей страницы присутствует в этой строке, тогда выводим инфу
Aleksei
«переведи запрос на русский язык» = опиши словами, что ты хочешь
Aleksei
в данном случае тебе нужен не IN , а LIKE
Aleksei
т. к. это строка
Максим
Gray
есть возможность писать значения в отдельную таблицу?
Aleksei
увидел) лайк тебе нужен короче. и не один, а четыре
Gray
просто через лайк тоже не сильно хорошо будет получаться, например, если ищем 35 в 350, 335, 4000, 3535