我想这是一件很简单的事情。我只想将RoutingAutoBundle用于嵌套页面。
我在这里跟随http://symfony.com/doc/current/cmf/cookbook/creating_a_cms/
说我有Page
个有父母的文件。
/**
*
* @PHPCR\Document(referenceable=true)
*
* @author Matt Durak <mattdurak@gmail.com>
*/
class Page implements RouteReferrersReadInterface
{
/**
* @PHPCR\Id()
*/
protected $id;
/**
* @PHPCR\ParentDocument()
*/
protected $parent;
//...
/**
* Get ID
*
* @return integer
*/
public function getId()
{
return $this->id;
}
public function getParent()
{
return $this->parent;
}
public function setParent($parent)
{
$this->parent = $parent;
return $this;
}
// ...
}
我的自动路由配置如下:
cmf_routing_auto:
mappings:
Study\MainBundle\Document\Page:
content_path:
pages:
provider: [specified, { path: /cms/routes/page }]
exists_action: auto_increment
not_exists_action: create
content_name:
provider: [content_method, { method: getTitle }]
exists_action: auto_increment
not_exists_action: create
我想要以下内容。假设我有这样的数据:
/cms/pages
/page-1
/page-2
/page-A
/page-B
目前,这4个页面将具有以下路线
/page/page-1
/page/page-2
/page/page-A
/page/page-B
我想
/page/page-1
/page/page-2
/page/page-2/page-A
/page/page-2/page-B
我尝试在content_path
提供程序中添加另一个content_object
并调用getParent
,但这不起作用。是否有人熟悉Symfony CMF和RoutingAutoBundle知道如何做到这一点?文档很少......
答案 0 :(得分:1)
您可以使用content_method提供程序并返回null或类中的父级。从RoutingAutoBundle alpha10开始,允许提供者不向路径添加任何内容。
代码如下:
cmf_routing_auto:
mappings:
Study\MainBundle\Document\Page:
content_path:
pages:
provider: [specified, { path: /cms/routes/page }]
exists_action: auto_increment
not_exists_action: create
parent:
provider: [content_method, { method: getParentPath }]
exists_action: use
not_exists_action: create
content_name:
provider: [content_method, { method: getTitle }]
exists_action: auto_increment
not_exists_action: create
class Page
{
// ...
public function getParentPath()
{
return $this->parent instanceof static ? $this->parent->getTitle() : null;
}
}
您也可以使用content_object,但计划将其从捆绑包中删除。