#symfony #routes #render #concrete5
Вопрос:
Скажем, есть страница /каталог, которая является родительской для всех продуктов. У меня могут быть постоянные маршруты со страницами, например /каталог/продукт/1, /каталог/продукт/2 и т. Д.
Но пользователь может выбрать любую другую страницу в качестве родительской страницы для продуктов каталога, например /stock.
Как я могу отображать данные о продуктах в узле переменной, например /{страница переменной}/продукт/{идентификатор}?
Это легко с несколькими страницами для каждого продукта — просто создайте блок «список продуктов» для отображения всех продуктов на родительской странице и блок «продукт» для отображения каждого продукта на дочерней странице списка продуктов.
Но мне не нужен миллион страниц. Мне нужна только 1 страница для отображения содержимого БД любого продукта на родительской странице, где его имя и маршрут могут измениться.
Ответ №1:
Хотя не уверен, что это лучший способ… Следующие работы. Теперь не имеет значения, на какой странице находится список продуктов, о любом ребенке заботятся в /любом/продукте/uid
Контроллер:
public function action_product($uid = 0)
{
$product = Product::getByUID($uid);
if ($product instanceof Product) {
$this->set('product', $product);
$this->runAction('product');
}
else {
$this->runAction('view');
}
}
Вид:
if ($controller->getAction() === 'product') {
...
} else {
...
}
Комментарии:
1. Почему бы и нет
view($a, $b, $c)
, если второй параметр не «продукт», перейдите к 404. Но тогда это было/<your-single-page>/catalog/product/1
бы так . В любом случае эти пути необходимо добавить вручную в карту сайта.