カテゴリと製品を含む Web サイトを作成しています。カテゴリと製品はどちらもコンテンツ タイプです。Web サイトの編集者がカテゴリのデータを変更する必要があるため、カテゴリを分類タイプにすることはできません。この問題を解決するために、カスタム ルーティングを作成しました。
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);
}
しかし、私は問題にぶつかりました:
リクエスト スコープ外のリクエスト サービスにアクセスしました。その呼び出しを before ハンドラーまたはコントローラーに移動してみてください。
そこで、一時的にデータベース リクエストをコメント アウトし、デフォルトのスラッグを $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);
このようにして、期待どおりに動作します:)