Правильный способ обработки моего запроса URL

У меня есть приложение, которое я пытаюсь построить, используя Тонкий PHP и в данный момент я борюсь с одним маршрутом, который я пытаюсь разобраться. В основном, что происходит, я иду в GET /:slug и это дает мне представление о продукте. Однако, если есть изменения в этом продукте, это будет вводная страница, на которой посетитель может выбрать точный продукт. Различия в этих продуктах будут:

  • цвет
  • Набирать номер
  • Ремень
  • материал

Возможно, несколько других. Проблема, с которой я столкнулся, заключается в том, что я не уверен на 100%, что если таковые будут. Я пишу свои маршруты для каждой возможности? Или есть способ, которым я могу получить более расслабленный подход к тому, как это формируется?

Я видел пример, где кто-то сделал следующее:

$app->get("/:slug(/:dial(/:strap(/:material)))", "Route\To\Controller:Action");

Однако я предполагаю, что это потребует, чтобы это было в этом установленном порядке?

Также следует добавить, что некоторые продукты не имеют дополнительных фильтров и отвечают непосредственно на /:slug тогда как для других могут потребоваться все дополнительные фильтры.

Эти результаты все установлены в базе данных. Я беру все продукты, которые имеют аналогичные слизень поскольку оно соответствует названию продукта, то каждый фильтр или набор фильтров будет определяться определенными частями в базе данных. Например: /this-product/this-dial/this-color/this-strap/this-material все эти значения будут храниться в таблице базы данных для продукта — они либо имеют соответствующее значение для материала — либо имеют значение NULL.

Это позволяет мне в корневом URL-адресе использовать SLUG, на котором я могу показывать варианты, что, на мой взгляд, поможет в совершении покупок.

У кого-нибудь есть решение ?? В любом случае, я мог бы добиться этого? Я поступаю неправильно?

3

Решение

Одним из возможных способов является создание различных шаблонов в зависимости от количества возвращенных продуктов. Например, если вы используете расширение шаблона Twig, вы можете легко выполнить итерацию по набору результатов и отобразить два шаблона, один для описания продукта и один для группы продуктов. В качестве альтернативы, вы можете справиться с этим, визуализируя представление в маршруте SLIM.

$app->get('/:slug', function ($slug) use ($app) {
$db = new dbConn();
$Products = $db->ProductQuery(); //  DB querying for 'slug' & returned product (s)

if( // here check how many $Products and if = 1 ) {
$app->render('single_product_view.html',$Products);
} else if( /// > 1 ) {
$app->render('multiple_product_view.html',$Products);
} else {
$app->response->redirect($app->urlFor('notFoudnt'), 404); // or whatever other route..
}

})->name("product");

Что касается запросов, почему вы хотите иметь маршрут для каждого атрибута продукта?

Разве вы не можете в этом случае иметь один маршрут для представления продукта и добавить параметр запроса (атрибуты) в URL?

/this-product?dial=this-dial&color=this-color&strap=this-strap&material=this-material

  $app->get('/:slug', function ($slug) use ($app) {
$Dial = $app->request()->get('dial');
$Color = $app->request()->get('color');
$Strap = $app->request()->get('strap');
$Mat = $app->request()->get('material');

// same as above, build your query string and render corresponding view

})->name("product");

Вы также можете группировать свои маршруты (для запроса AJAX может быть ..)

$app->group('/api', function () use ($app) {

// Products attributes group route
$app->group('/products', function () use ($app) {

// Get Products with color = :color  /api/products/color/:color
$app->get('/color/:color', function ($color ) {

});

// Get Products with Strap = :strap   /api/products/strap/:strap
$app->get('/strap/:strap', function ($strap) {

});

// and so on..
});
});
1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector