使用RoutingAutoBundle(Symfony CMF)的嵌套路由

时间:2014-02-16 21:04:20

标签: symfony symfony-cmf

我想这是一件很简单的事情。我只想将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知道如何做到这一点?文档很少......

1 个答案:

答案 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,但计划将其从捆绑包中删除。