Отдать 404 если param в waRequest отличен от заданного Есть решение

Замечу сразу, что я использую чистый фреймворк без каких либо ShopScript и прочего.

Ситуация такова. Есть список товаров в базе (iphone4s, iphone5, iphone5c, iphone5s и т.д.). Мне было крайне необходимо, чтобы URL выглядет так /catalog/iphone4s.php — этого я добился при помощи маски в раутинге:

'url' => '<model>.php'

Отдачу шаблона еще не настраивал, проверяю всё на дебаг странице фреймоврка.

Проблема в том, что какой бы набор символов перед расширением .php ни ставил, раутинг отдает дебаг страницу, а нужно, чтобы отдавал 404, при условии если такой модели айфона нет. Например, на /catalog/iphone4444s.php нужно отдать 404 ошибку, т.к. в базе нет модели айфона iphone4444s.

Направьте меня в правильное русло. Как я понимаю, в файле routing.php нужно делать вызов к базе, собирать в массив все имеющиеся значения моделей айфонов и подставлять в маску этот массив?

В общем, мозг на бекрень, не пойму на какой стадии и в каком файле делать проверку условия наличия модели айфона в базе.

1 ответ

  • 2
    Алексей Webasyst 21 июня 2017 19:35 # Решение

    Если у вас чистый фреймворк, то где же хранятся все товары?

    В 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, который будет проверять данные и формировать либо страницу либо отказ.

    • +1
      Никита Никита 21 июня 2017 19:41 #

      Товары хранятся в MySQL-базе. А в базу они попадают через кастомное приложение.

    • +1
      Никита Никита 21 июня 2017 22:11 #

      Спасибо, вы дали наводку. В экшене нужно делать запрос в БД на наличие записи с соответствующим полем.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите