From 44f66d42c51df2b5f7436bc02bb29f92067312dc Mon Sep 17 00:00:00 2001 From: Sebastian Blum Date: Sat, 8 Nov 2014 20:11:14 +0100 Subject: [PATCH 1/2] Removed hardcoded dependency of KnpMenuBundle in MenuBlock that the doctrine proxies will work in production environment menuNode should be null if null or an invalid node are passed to setMenuNode --- Doctrine/Phpcr/MenuBlock.php | 8 ++++++-- Tests/Functional/Block/MenuBlockServiceTest.php | 12 ++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/Doctrine/Phpcr/MenuBlock.php b/Doctrine/Phpcr/MenuBlock.php index bed2b1df..23a2677a 100644 --- a/Doctrine/Phpcr/MenuBlock.php +++ b/Doctrine/Phpcr/MenuBlock.php @@ -53,9 +53,13 @@ public function getMenuNode() * * @return MenuBlock $this */ - public function setMenuNode(NodeInterface $menuNode = null) + public function setMenuNode($menuNode = null) { - $this->menuNode = $menuNode; + if ($menuNode instanceof NodeInterface) { + $this->menuNode = $menuNode; + } else { + $this->menuNode = null; + } return $this; } diff --git a/Tests/Functional/Block/MenuBlockServiceTest.php b/Tests/Functional/Block/MenuBlockServiceTest.php index dd8a9ab5..494afbf0 100644 --- a/Tests/Functional/Block/MenuBlockServiceTest.php +++ b/Tests/Functional/Block/MenuBlockServiceTest.php @@ -66,4 +66,16 @@ public function testExecutionOfEnabledBlock() $menuBlockService = new MenuBlockService('test-service', $templatingMock, $blockRendererMock, $blockContextManagerMock); $menuBlockService->execute($menuBlockContext); } + + public function testSetMenuNode() + { + $menuBlock = new MenuBlock(); + $this->assertAttributeEmpty('menuNode', $menuBlock); + + $menuBlock->setMenuNode($this->getMock('Knp\Menu\NodeInterface')); + $this->assertAttributeInstanceOf('Knp\Menu\NodeInterface', 'menuNode', $menuBlock); + + $menuBlock->setMenuNode(null); + $this->assertAttributeSame(null, 'menuNode', $menuBlock); + } } From 9c22f064472a38faf9c26f52ada0be6e04bc1454 Mon Sep 17 00:00:00 2001 From: sebastianblum Date: Fri, 14 Nov 2014 13:58:51 +0100 Subject: [PATCH 2/2] setMenuNode is more strict and requires NodeInterface or null --- Doctrine/Phpcr/MenuBlock.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Doctrine/Phpcr/MenuBlock.php b/Doctrine/Phpcr/MenuBlock.php index 23a2677a..57e53a12 100644 --- a/Doctrine/Phpcr/MenuBlock.php +++ b/Doctrine/Phpcr/MenuBlock.php @@ -49,16 +49,16 @@ public function getMenuNode() * * Set to null to remove the reference. * - * @param NodeInterface $menuNode A mapped menu node. + * @param NodeInterface|null $menuNode A mapped menu node. * * @return MenuBlock $this */ public function setMenuNode($menuNode = null) { - if ($menuNode instanceof NodeInterface) { + if (null === $menuNode || $menuNode instanceof NodeInterface) { $this->menuNode = $menuNode; } else { - $this->menuNode = null; + throw new \InvalidArgumentException('$menuNode must be an instane of NodeInterface'); } return $this;