Я следовал документации по контроллерам и шаблонам после интеграции Symfony CMF и AutoRoutingBundle в свое приложение. Моя проблема похожа на # 50450338 , но даже при правильном названии аргумента я не могу решить эту проблему.
Я могу создать Page
документ, и создается AutoRoute
для этого автоматически, но при попытке использовать контроллер для отображения этой страницы, я не могу включить параметр $contentDocument
в действие моего контроллера, как предполагает документ. При добавлении аргумента я получаю эту ошибку:
Не удалось разрешить аргумент $ contentDocument из "App \ ContentBundle \ Controller \ PageController :: pageaction ()", возможно, вы забыли зарегистрировать контроллер какили пропустили пометку в «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,
];
}