KnpMenuBundle を通じて Symfony2.3 で KnpMenu を使用しています。
MenuItem
最も簡単な方法で、属性を追加してクラスをカスタマイズしたいと思います。
目的は、アプリケーションのエンティティのいずれかにリンクしMenuItem
、後でそれを取得できるようにすることです。
たとえば、私はこれをしたい:
$menu = $factory->createItem('root');
$menu->addChild('New Model', array('route' => 'my_route'))
->setAttribute('icon', 'glyphicon-plus')
->setRelatedEntity($myEntity); // <== This doesn't exist by default
簡単だが醜い方法は、Knp\Menu\MenuItem.php
これを編集して追加することです:
/**
* Entity to which this menuItem is related
* @var Entity
*/
private $relatedEntity;
/**
* Set relatedEntity
*
* @param string $relatedEntity
* @return MenuItem
*/
public function setRelatedEntity($relatedEntity) {
$this->relatedEntity = $relatedEntity;
return $this;
}
/**
* Get relatedEntity
* @return Entity
*/
public function getRelatedEntity() {
return $this->relatedEntity;
}
それが適切な方法ではないことはわかっているので、上書きしようとしましKnp\Menu\MenuItem
たKnp\Menu\MenuFactory
が、十分ではありません...
もっと色々なものを上書きしないといけない気がするので、ここでアドバイスをお願いします。バンドルは非常に複雑で、この機能 (MenuItem にクラス属性を追加する) は既にバンドルによって管理されているように感じますが、その方法はわかりません。
何か案が?