奏鸣曲管理员:获取所有页面的下拉列表



我已经为奏鸣曲页面创建了一个块,其中包括标题,文本,图像(来自奏鸣曲媒体(,并应包括指向网站另一页的链接。

考虑到该网站是双语的(包括URL(,我无法在管理员中使用用户类型。最好的选择可能是在网站上显示所有活动页面的下拉列表,但我没有设法这样做。

在Sonata页面管理中,创建(或编辑(页面时,实际上有这样的列表,即"目标"字段。因此,我挖了一点,找到了使用称为getChoices((函数的PagesEletortype,该函数可以解决问题。但是,我没有在块的管理员中使用该功能(或该字段(。

到目前为止,这是我的块形式:

public function buildEditForm(FormMapper $formMapper, BlockInterface $block)
{
    $formMapper
        ->add('settings', 'sonata_type_immutable_array', array(
            'keys' => array(
                array('title', 'text', array('required' => false)),
                array('texte', 'text', array('required' => false)),
                array($this->getMediaBuilder($formMapper), null, array('context' => 'media_accueil')),
            )
        ))
    ;
}

有什么想法?

得到它,可能会有一个更好的(清洁(解决方案,但至少可以使用。这里是步骤:

在services.yml中,将页面管理器服务添加为参数:

sonata.block.service.text_with_link:
    class: ApplicationSonataPageBundleBlockTextWithLinkBlockService
    arguments:
        - sonata.block.service.text_with_link
        - "@templating"
        - @sonata.page.manager.page
    tags:
        - { name: sonata.block }

在您的BlockService PHP文件中,添加__ -construct方法如下以初始化页面管理器:

class TexteTitreBlockService extends BaseBlockService
{
    /**
     * @var PageManagerInterface
     */
    protected $pageManager;
    /**
     * @param string               $name
     * @param EngineInterface      $templating
     * @param PageManagerInterface $pageManager
     */
    public function __construct($name, EngineInterface $templating, PageManagerInterface $pageManager)
    {
        parent::__construct($name, $templating);
        $this->pageManager = $pageManager;
    }
}

那么您需要做的就是获取页面列表:

$pageList = $this->pageManager->findBy(array(
    'routeName' => Page::PAGE_ROUTE_CMS_NAME,
));

然后,您可以使用该变量的内容用于ChoiceType :: class(使用对您有用的任何内容,页名,页面slug等...(

相关内容

  • 没有找到相关文章

最新更新