arsthanea/page-actions-bundle

1.1.2 2020-06-04 11:05 UTC

This package is not auto-updated.

Last update: 2024-09-22 07:58:24 UTC


README

此包允许您在Kunstmaan CMS的任何页面上挂载控制器(或任何其他路由)。实际上,给定一个/foo/bar页面和一个/thank-you路由,您可以通过/foo/bar/thank-you访问,并使用/foo/bar$page$nodeTranslation

安装

  1. composer require arsthanea/page-actions-bundle
  2. PageActionsBundle添加到您的Kernel
  3. 更新您的db schema / 创建迁移
  4. 在主routing.yml中导入page_actions路由
# app/config/routing.yml

_page_actions:
    type: page_actions
    resource: .
    

用法

配置可用资源

首先,您需要配置可用的路由/控制器。由于此路由高度动态,不是任何路由都会匹配任何页面,因此我们需要一些提示。在配置中列出您的资源

# app/config/config.yml or such

page_actions:
    resources:
        landing_page: 
            resource: @LandingPageBundle/Controller/LandingPageActionsController.php
            type: annotation

这可以是注解和控制器,或者yaml / xml等与路由相同,就像您在routing.yml中使用的路由一样。然而,您不能使用其他配置选项,如prefixdefaults等。键名很重要,它将在以后使用。

创建控制器

现在让我们定义控制器。您可以在操作中自动使用$page$nodeTranslation。除此之外,它只是一个标准的控制器。例如

class LandingPageActionsController extends Controller {

    /**
     * @Route(name="landing_page_submit", path="submit", methods = {"POST"})
     *
     * @param Request         $request
     * @param NodeTranslation $nodeTranslation
     *
     * @return RedirectResponse
     */
    public function submitAction(Request $request, NodeTranslation $nodeTranslation) {
       // 
       // handle some form data
       //
       return $this->redirectToRoute('landing_page_thank_you', ["url" => $nodeTranslation->getUrl()]);
    }
    
    /**
     * @Route(name="landing_page_thank_you", path="thank-you")
     *
     * @param HasNodeInterface $page
     *
     * @return Response
     */
    public function submitAction(HasNodeInterface $page) {
       // 
       // notice that $page is referencing to current page
       // 
       return $this->render('@LandingPageBundle/Pages/ThankYou.html.twig, ["page" => $page]);
    }
    
}

配置页面

最后一部分是配置页面实体以处理指定的操作。通过实现PageActionsInterface来完成此操作

# Entity\LandingPage.php

class LandingPage extends AbstractEntity implements PageActionsInterface {

// …
    public function getPageActions() {
        return ['landing_page']; 
    }
// …

}

请注意,此方法返回的值需要与之前在配置中定义的键匹配。

保存页面

目前还没有任何效果。现在您需要保存页面,以创建自定义页面路由。

使用操作

例如,在您的默认视图中

<form action={{ path("landing_page_submit", { "url": nodetranslation.url }) }}" method="POST">

您没有在路由中指定url参数,但由于资源是相对于页面挂载的,它将由包自动添加,并且在生成路由时您需要提供它。