arsthanea / page-actions-bundle
1.1.2
2020-06-04 11:05 UTC
Requires
- kunstmaan/bundles-cms: ~3.2 | ~5
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
。
安装
composer require arsthanea/page-actions-bundle
- 将
PageActionsBundle
添加到您的Kernel - 更新您的db schema / 创建迁移
- 在主
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
中使用的路由一样。然而,您不能使用其他配置选项,如prefix
,defaults
等。键名很重要,它将在以后使用。
创建控制器
现在让我们定义控制器。您可以在操作中自动使用$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
参数,但由于资源是相对于页面挂载的,它将由包自动添加,并且在生成路由时您需要提供它。