1

在将 Symfony CMF 和 AutoRoutingBundle 集成到我的应用程序中之后,我遵循了控制器和模板文档。我的问题类似于#50450338,但即使正确命名参数,我也无法解决问题。

我可以创建一个PageDocument 并AutoRoute自动为其创建一个,但是当尝试使用控制器来显示该页面时,我无法$contentDocument按照文档的建议将参数放入我的控制器操作中。添加参数时,我收到此错误:

无法解析“App\ContentBundle\Controller\PageController::pageaction()”的参数 $contentDocument,也许您忘记将控制器注册为服务或错过使用“controller.service_arguments”标记它?

即使控制器按照建议标记,错误仍然存​​在。

如果我在没有参数的情况下呈现页面模板$contentDocument,我可以看到它,但我无法获取Page属性。

这是我的Page文件:

/**
 * Class Page
 * @package App\ContentBundle\Document
 *
 * @Document(translator="attribute", referenceable=true)
 */
class Page implements
    TranslatableInterface,
    RouteReferrersReadInterface
{
    /**
     * @var string
     * @Id()
     */
    protected $id;

    /**
     * @var string
     * @Uuid()
     */
    protected $uuid;

    /**
     * @var object
     * @ParentDocument()
     */
    protected $parent;

    /**
     * @Referrers(
     *     referringDocument="Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr\Route",
     *     referencedBy="content"
     * )
     */
    protected $routes;

    /**
     * @var string|boolean
     * @Locale()
     */
    private $locale;

    /**
     * @var string|null
     * @Nodename()
     */
    private $slug;

    /**
     * @var string|null
     * @Field(type="string", nullable=false)
     */
    private $title;

    /**
     * @var \Sonata\BlockBundle\Model\BlockInterface[]
     * @Children()
     */
    private $blocks;

    public function __construct ()
    {
        $this->blocks = [];
    }

    /**
     * @return string
     */
    public function getId ()
    : string
    {
        return $this->id;
    }

    /**
     * @return object
     */
    public function getParentDocument ()
    : object
    {
        return $this->parent;
    }

    /**
     * @param object $parent
     */
    public function setParentDocument ( $parent )
    : void
    {
        $this->parent = $parent;
    }

    /**
     * @return mixed
     */
    public function getRoutes ()
    {
        return $this->routes;
    }

    /**
     * @return bool|string
     */
    public function getLocale ()
    {
        return $this->locale;
    }

    /**
     * @param bool|string $locale
     */
    public function setLocale ( $locale )
    : void
    {
        $this->locale = $locale;
    }

    /**
     * @return string|null
     */
    public function getSlug ()
    : ?string
    {
        return $this->slug;
    }

    /**
     * @param string|null $slug
     */
    public function setSlug ( ?string $slug )
    : void
    {
        $this->slug = $slug;
    }

    /**
     * @return string|null
     */
    public function getTitle ()
    : ?string
    {
        return $this->title;
    }

    /**
     * @param string|null $title
     */
    public function setTitle ( ?string $title )
    : void
    {
        $this->title = $title;
    }

    /**
     * @return \Sonata\BlockBundle\Model\BlockInterface[]
     */
    public function getBlocks ()
    : array
    {
        return $this->blocks;
    }

    /**
     * @param \Sonata\BlockBundle\Model\BlockInterface[] $blocks
     */
    public function setBlocks ( array $blocks )
    : void
    {
        $this->blocks = $blocks;
    }
}

Symfony CMF 配置:

cmf_routing:
    chain:
        routers_by_id:
            router.default: 200
            cmf_routing.dynamic_router: 100
    dynamic:
        persistence:
            phpcr:
                enabled: true
                manager_name: default
        controllers_by_class:
            App\ContentBundle\Document\Page: App\ContentBundle\Controller\PageController::pageAction

cmf_routing_auto.yml在我的捆绑包中:

App\ContentBundle\Document\Page:
    definitions:
        main:
            uri_schema: /{slug}
    token_providers:
        slug: [content_method, {method: getSlug}]

和控制器动作:

    /**
     * @Template()
     * @param $contentDocument
     *
     * @return array
     */
    public function pageAction ( $contentDocument )
    {
        return [
            'page' => $contentDocument,
        ];
    }
4

0 回答 0