Symfony2 と Knpmenu を使用して、以下を処理するメニューを作成するのに苦労しています:
- パン粉
- 動的パラメータによるルーティング
- 異なる子で始まる個別のメニューのレンダリング
私のMenu/Builder.php
ファイルは次のようになります (navbar、pull-nav などの余分なビットは、ブートストラップ クラスを使用してレンダリングを処理する mopa_bootstrap 拡張機能の一部です):
namespace My\AppBundle\Menu;
use Knp\Menu\FactoryInterface;
class Builder
{
public function mainMenu(FactoryInterface $factory, array $options)
{
$menu = $factory->createItem(
'root', array(
'navbar' => true,
'pull-right' => true,
)
);
// Main Menu -> Config
// no link here, it's just a placeholder
$dropdown = $menu->addChild(
'Config', array(
'dropdown' => true,
'caret' => true,
)
);
// Menu -> Config -> User
$dropdown2 = $dropdown ->addChild(
'User', array(
'route' => 'user',
)
);
// Secondary Menu -> Edit (but child of Menu -> Config -> User)
$dropdown2->addChild(
'Edit',
array(
'route' => 'user_edit',
'routeParameters' => array('name' => $options['id']),
)
);
アイデアは、最初の 2 つのレベルのみを印刷するメイン メニューと、表示されている特定の要素の編集/削除/任意のビュー間をユーザーが移動できるように別の場所にレンダリングされる別のメニューを用意することです。
私が達成しようとしているのは、親構造を処理するための単一の構造を持つことです。メニューでアクティブとして親に署名するだけでなく、作業中のブレッドクラム構造を処理できるようにすることです。
Resources/views/base.html.twig
私はこのようにメインメニューを呼び出しています:
{{ mopa_bootstrap_menu('MyAppBundle:Builder:mainMenu', {depth: 2}) }}
理想的には、次のようなサブメニューです。
{% set id = app.request.attributes.get('id') %}
{% if app.request.attributes.get('_route') starts with 'user_' %}
{% set menu = knp_menu_get('MyAppBundle:Builder:mainMenu', ['User'], {'id': id }) %}
{{ knp_menu_render(menu) }}
{% endif %}
でも:
$options['id']
定義されていないため、メイン メニューのレンダリング時に knpmenu がエラーを返す- 私はまだセカンダリ メニューをレンダリングできません (したがって、パラメータ 'User' を渡すことによって) - ページはそのブロックで黒の出力を返すだけです
このアプローチは正しいですか?私は使用"knplabs/knp-menu": "2.0.*@dev"
しています"symfony/symfony": "2.5.*"