Отдать 404 если param в waRequest отличен от заданного Есть решение
Замечу сразу, что я использую чистый фреймворк без каких либо ShopScript и прочего.
Ситуация такова. Есть список товаров в базе (iphone4s, iphone5, iphone5c, iphone5s и т.д.). Мне было крайне необходимо, чтобы URL выглядет так /catalog/iphone4s.php — этого я добился при помощи маски в раутинге:
'url' => '<model>.php'
Отдачу шаблона еще не настраивал, проверяю всё на дебаг странице фреймоврка.
Проблема в том, что какой бы набор символов перед расширением .php ни ставил, раутинг отдает дебаг страницу, а нужно, чтобы отдавал 404, при условии если такой модели айфона нет. Например, на /catalog/iphone4444s.php нужно отдать 404 ошибку, т.к. в базе нет модели айфона iphone4444s.
Направьте меня в правильное русло. Как я понимаю, в файле routing.php нужно делать вызов к базе, собирать в массив все имеющиеся значения моделей айфонов и подставлять в маску этот массив?
В общем, мозг на бекрень, не пойму на какой стадии и в каком файле делать проверку условия наличия модели айфона в базе.
Эта тема в архиве. Добавление комментариев к ней отключено.










3 ответа
Если у вас чистый фреймворк, то где же хранятся все товары?
В Shop-script в /lib/actions/frontend/shopFrontendProduct.action.php прописано
if ($this->params) { $product = $this->params; } else { $product_model = new shopProductModel(); $product = $product_model->getByField('url', waRequest::param('product_url')); }if (!$product) { throw new waException(_w('Product not found'), 404); }
в routing вам нужно направлять на action/controller, который будет проверять данные и формировать либо страницу либо отказ.
Товары хранятся в MySQL-базе. А в базу они попадают через кастомное приложение.
Спасибо, вы дали наводку. В экшене нужно делать запрос в БД на наличие записи с соответствующим полем.