public function testPersist() { $route = new Route(); $root = $this->getDm()->find(null, self::ROUTE_ROOT); $route->setContent($root); // this happens to be a referenceable node $route->setPosition($root, 'testroute'); $route->setDefault('x', 'y'); $route->setRequirement('testreq', 'testregex'); $route->setOptions(array('test' => 'value')); $route->setOption('another', 'value2'); $this->getDm()->persist($route); $this->getDm()->flush(); $this->assertEquals('/testroute', $route->getPath()); $this->getDm()->clear(); $route = $this->getDm()->find(null, self::ROUTE_ROOT . '/testroute'); $this->assertNotNull($route->getContent()); $this->assertEquals('/testroute', $route->getPath()); $this->assertEquals('y', $route->getDefault('x')); $defaults = $route->getDefaults(); $this->assertArrayHasKey('x', $defaults); $this->assertEquals('y', $defaults['x']); $requirements = $route->getRequirements(); $this->assertArrayHasKey('testreq', $requirements); $this->assertEquals('testregex', $requirements['testreq']); $options = $route->getOptions(); $this->assertArrayHasKey('test', $options); $this->assertEquals('value', $options['test']); $this->assertArrayHasKey('another', $options); $this->assertEquals('value2', $options['another']); }
/** * Update the locale of a route if $id starts with the prefix and has a * valid locale right after. * * @param Route $doc The route object * @param string $id The id (in move case, this is not the current * id of $route). * @param DocumentManager $dm The document manager to get locales from if * the setAvailableTranslations option is * enabled. * @param boolean $force Whether to update the locale even if the * route already has a locale. */ protected function updateLocale(Route $doc, $id, DocumentManager $dm, $force = false) { $matches = array(); // only update if the prefix matches, to allow for more than one // listener and more than one route root. if (!preg_match('#(' . implode('|', $this->getPrefixes()) . ')/([^/]+)(/|$)#', $id, $matches)) { return; } if (in_array($locale = $matches[2], $this->locales)) { if ($force || !$doc->getDefault('_locale')) { $doc->setDefault('_locale', $locale); } if ($force || !$doc->getRequirement('_locale')) { $doc->setRequirement('_locale', $locale); } } else { if ($this->addLocalePattern) { $doc->setOption('add_locale_pattern', true); } if ($this->updateAvailableTranslations && $dm->isDocumentTranslatable($doc) && !$doc->getRequirement('_locale')) { $locales = $dm->getLocalesFor($doc, true); $doc->setRequirement('_locale', implode('|', $locales)); } } }
protected function loadVoterMenu(DocumentManager $manager) { // test content $content = new Content(); $content->setTitle('Content 1'); $content->setId('/test/content-1'); $manager->persist($content); $route = new Route(); $route->setId('/test/routes/contents/content-1'); $route->setDefault('_controller', 'Symfony\\Cmf\\Bundle\\MenuBundle\\Tests\\Resources\\Controller\\VoterController::requestContentIdentityAction'); $route->setContent($content); $manager->persist($route); // test blog $blog = new Content(); $blog->setTitle('Blog'); $blog->setId('/test/blog-1'); $manager->persist($blog); $route = new Route(); $route->setId('/test/routes/blog'); $route->setDefault('_controller', 'Symfony\\Cmf\\Bundle\\MenuBundle\\Tests\\Resources\\Controller\\VoterController::blogAction'); $route->setContent($blog); $manager->persist($route); // test blog post $post = new Post(); $post->setTitle('My Post'); $post->setId('/test/blog-1/my-post'); $manager->persist($post); $route = new Route(); $route->setId('/test/routes/blog/my-post'); $route->setDefault('_controller', 'Symfony\\Cmf\\Bundle\\MenuBundle\\Tests\\Resources\\Controller\\VoterController::postAction'); $route->setContent($post); $manager->persist($route); // test articles $articles = new Content(); $articles->setTitle('Articles Index'); $articles->setId('/test/articles'); $manager->persist($articles); $articlesRoute = new Route(); $articlesRoute->setId('/test/routes/articles'); $articlesRoute->setDefault('_controller', 'Symfony\\Cmf\\Bundle\\MenuBundle\\Tests\\Resources\\Controller\\VoterController::articlesAction'); $articlesRoute->setContent($articles); $articlesRoute->setOption('currentUriPrefix', '/articles'); $manager->persist($articlesRoute); $article1 = new Content(); $article1->setTitle('Article 1'); $article1->setId('/test/article-1'); $manager->persist($article1); $route = new Route(); $route->setId('/test/routes/articles/some-category'); $manager->persist($route); $route = new Route(); $route->setId('/test/routes/articles/some-category/article-1'); $route->setDefault('_controller', 'Symfony\\Cmf\\Bundle\\MenuBundle\\Tests\\Resources\\Controller\\VoterController::postAction'); $route->setContent($article1); $manager->persist($route); // menu items $menu = new Menu(); $menu->setName('side-menu'); $menu->setLabel('Side Menu'); $menu->setParentDocument($this->menuRoot); $manager->persist($menu); $menuNode = new MenuNode(); $menuNode->setParentDocument($menu); $menuNode->setLabel('Default Behavior'); $menuNode->setName('default'); $menuNode->setRoute('current_menu_item_default'); $manager->persist($menuNode); $menuNode = new MenuNode(); $menuNode->setParentDocument($menu); $menuNode->setLabel('Request Content Identity Voter'); $menuNode->setName('request-content-identity-voter'); $menuNode->setContent($content); $manager->persist($menuNode); $menuNode = new MenuNode(); $menuNode->setParentDocument($menu); $menuNode->setLabel('URI Prefix Voter'); $menuNode->setName('uri-prefix-voter'); $menuNode->setContent($articlesRoute); $manager->persist($menuNode); $menuNode = new MenuNode(); $menuNode->setParentDocument($menu); $menuNode->setLabel('Request Parent Content Identity Voter'); $menuNode->setName('request-parent-content-identity-voter'); $menuNode->setContent($blog); $manager->persist($menuNode); }