Я делаю сайт с категориями и продуктами. Категории и продукты являются и контентом. Категории не могут быть типа таксономии, потому что редактор веб-сайта должен изменять данные для категорий. Для того, чтобы решить эту проблему, я создал собственный маршрут:Запрос базы данных в контроллере маршрутизации
products:
path: /{catslug}/{slug}
defaults: { _controller: 'Bolt\Controllers\Frontend::record', contenttypeslug: 'products' }
requirements:
catslug: 'Bolt\Controllers\Routing::getAnyCategorieRequirement'
Я добавил функцию в Routing.php (я позже перенести его расширение):
public function getAnyCategorieRequirement()
{
$slugs = array();
foreach($this->app['storage']->getContent("categories") as $cat){
$slugs[] = $cat['slug'];
}
return implode("|", $slugs);
}
Но я столкнулся с проблемой :
Доступ к запрашиваемому запросу за пределами сферы действия запроса. Попробуйте переместить этот вызов перед обработчиком или контроллером.
Так что я временно закомментировать запрос к базе данных и добавил слизняка по умолчанию до $ слизней:
public function getAnyCategorieRequirement()
{
$slugs = array();
$slugs[] = "hollandse-kazen";
return implode("|", $slugs);
}
Таким образом, все работало, как ожидалось. Теперь мой вопрос: как я могу выполнить этот запрос базы данных в контроллере маршрутизации, или есть ли обходной путь для этой проблемы?
первое решение
Росс Райли работал для меня:
$slugs = array();
//Do complicated request because of [url to stackoverflow]
$stmt = $this->app['db']->query('SELECT slug FROM bolt_categories');
while($cat = $stmt->fetch()){
$slugs[] = $cat['slug'];
}
return implode("|", $slugs);
Таким образом, он работает, как ожидалось :)
Ааа, спасибо за ответ :) Я уже отказался от надежды на anwser :) Исправление с «временно перезаписью запрос не работает, хотя ... Я сейчас пытаюсь необработанным решение запроса –
Отлично, первый метод работал отлично! Спасибо. Но вы должны рассмотреть второй метод :) –