Уникальный id-кэша страницы и проверка _GET-параметров

StalkerClasses

Новичок
Есть маршруты:
/ = actionIndex()
/fabric/<id>/ = actionFabric()
/fabrid/<id>/cat/<catId>/ = actionCat()
/fabrid/<id>/cat/<catId>/page/<page>/ = actionCat()
/fabrid/<id>/cat/<catId>/page/<page>/model/<modelId>/ = actionModel()

На данных маршрутах можно проверить существование следующих _GET параметров, сделав простое обращение exists() к БД за соответствующей записью.
fabrid ->id (нет нет - 404)
cat -> id (если нет - 404)
model -> id (если нет - 404)

Но вот проверить параметр page в /fabrid/1/cat/12/page/32/model/545/ уже сложнее (придется составлять кучу запросов с учетом fabric-id, cat-id, model-id - на этой ли странице находится модель). Пользователь может до бесконечности подставлять цифры и будут генерироваться соответствующие страницы. Получается что где используется page нет возможности создать уникальный ID-кэша. Он будет бесконечным, если пользователь будет в ручную подменять значение страницы.

/fabrid/1/cat/12/page/32/model/545/
/fabrid/1/cat/12/page/43432/model/545/
/fabrid/1/cat/12/page/343532/model/545/
/fabrid/1/cat/12/page/1435552312/model/545/

1. Как в таком случае формировать уникальные идентификаторы кэша страницы где есть параметр page?
2. А также как осуществляется проверка _GET параметров (за исключением случаев проверок на целое либо строчное значение)? Что обычно для этого предоставляют популярные фреймворки?
 
Последнее редактирование:

WMix

герр M:)ller
Партнер клуба
$key = json_serialize([‘route’=>$route,’params’=>$params]);
Годится?
 

StalkerClasses

Новичок
Да это подходит, но есть одно но.
Как обычно делают валидацию каждого из params?
Особенно page/1/.

Пользователь может саморучно вписать любу page/ и ваш $key будет создан с тем что введет пользователь. А это бесконечное кол-во key.
 

fixxxer

К.О.
Партнер клуба
Не кэшируй на уровне html, кэшируй на уровне моделей. Затраты на рендеринг шаблонизатором мизерные, на типичном проекте 99% нагрузки это база. И вопрос инвалидации кэша намного проще решается с моделями.
 

StalkerClasses

Новичок
А как кэширование на уровне модели поменяет суть?
Ведь модель же закэширует любую выборку с любым page/10/ page/103334/ page /1040455454/
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
У тебя изначально нет страницы 100500 и чего ты собрался кешировать?
 

StalkerClasses

Новичок
Приведу реальный пример.

Есть страница с новостями. Мы на 4 странице. Откройте детальную страницу новости. Там будет кнопка назад к списку. Но она ведет не на 4 страницу с которой вы зашли, а просто на раздел новости (т.е. на 1 страницу). Я же хочу сделать что бы был возврат на ту страницу с которой мы перешли.

Как проверить относится ли новости к данной странице?
Я могу проверить категорию по ID, я могу проверить сущестование 3d-модели по ID, могу проверить фабрику по ID. Но вот проверить относится ли 3d-модель например к странице №5 уже сложно.

Как вообще в принципе проверяются _GET параметры?
Что они переданы достоверные через приложение, а не подставленны через адресную строку браузера пользователем.

PHP:
require('Smarty.class.php');
$smarty = new Smarty;

$smarty->caching = true;

$my_cache_id = $_GET['article_id'];

$smarty->display('index.tpl',$my_cache_id);
Что бы создать $my_cache_id - мне нужно проверить каждый из его параметров - в данном случае: $my_cache_id = $_GET['article_id'];.
Но не все параметры можно проверить простым запросом к БД. И как быть?

По этому вопросу в сети как то не могу найти подходящей информации:
php framework cache id from _get valid
 
Последнее редактирование:

fixxxer

К.О.
Партнер клуба
Еще раз, я не предлагаю делать "$smarty->caching = true;". Вообще нафиг это. Слишком много трудностей, которые не стоят того.

Где-то там внутри будет загрузка модели по ID. Вот там и прочитать из кэша вместо обращения к базе.
 

AnrDaemon

Продвинутый новичок
Smarty предоставляет замечательную возможность кеширования страницы поблочно.
Не надо формировать контент весь в программе, а Smarty использовать вместо print.
Надо пользоваться предоставленными шаблонизатором функциями.
 
Сверху