Аргумент действия контроллера $ contentDocument с Symfony CMF Dynamic Router - PullRequest
1 голос
/ 21 октября 2019

Я следовал документации по контроллерам и шаблонам после интеграции 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,
        ];
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...