在将 Symfony CMF 和 AutoRoutingBundle 集成到我的应用程序中之后,我遵循了控制器和模板文档。我的问题类似于#50450338,但即使正确命名参数,我也无法解决问题。
我可以创建一个Page
Document 并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,
];
}