wieni / wmcontroller
为 Drupal 9 实体添加特定捆绑控制器的支持。
Requires
- php: ^8.0
- drupal/core: ^9.1 || ^10 || ^11
- wieni/wmtwig: ^1.0
Requires (Dev)
- composer-runtime-api: ^2.0
- ergebnis/composer-normalize: ^2.0
- wieni/wmcodestyle: ^1.7
- dev-main
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 2.0.0-alpha3
- 2.0.0-alpha2
- 1.2.2
- 1.2.1
- 1.2.0
- 1.1.1
- 1.1.0
- 1.0.1
- 1.0.0
- 0.10.2
- 0.10.1
- 0.10.0
- 0.9.0
- 0.8.13
- 0.8.12
- 0.8.11
- 0.8.10
- 0.8.9
- 0.8.8
- 0.8.7
- 0.8.6
- 0.8.5
- 0.8.4
- 0.8.3
- 0.8.2
- 0.8.1
- 0.8.0
- 0.7.0
- 0.6.4
- 0.6.3
- 0.6.2
- 0.6.1
- 0.6
- 0.5.7
- 0.5.6
- 0.5.5
- 0.5.4
- 0.5.3
- 0.5.2
- 0.5.1
- 0.5.0
- 0.4.1
- 0.4.0
- 0.3.1
- 0.3.0
- 0.2.6
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2.0
- 0.1.0
- dev-release/v1
- dev-feature/drupal-10
- dev-feature/drupal-10-no-split
- dev-feature/split
- dev-feature/split-pre
- dev-release/v0.6
This package is auto-updated.
Last update: 2024-09-12 19:50:21 UTC
README
为 Drupal 8 实体添加特定捆绑控制器的支持。
为什么?
- 通过提供以不同方式渲染不同捆绑实体实体的能力,改进 Entity API 的开发者体验。
- 构建布局的新方法:在控制器中收集数据,并使用它来渲染 Twig 模板。灵感来自 Laravel 和其他 MVC 框架。完全可选。
安装
此软件包需要 PHP 7.1 和 Drupal 8 或更高版本。可以使用 Composer 进行安装
composer require wieni/wmcontroller
如果您在控制器中遇到早期渲染错误,请还应该包含来自 #2638686 的补丁。
配置
在开始之前,请确保将模板存储的组件或模块配置为执行此操作。有关更多信息,请参阅 wmtwig 文档。
配置存储为服务参数。您可以在定义在 $settings['container_yamls']
的服务 YAML 文件或(自定义)模块的 services.yml
文件中覆盖这些参数。
parameters: wmcontroller.settings: # The controller responsible for forwarding to bundle-specific controllers. # Only override this if you know what you're doing. frontcontroller: 'Drupal\wmcontroller\Controller\FrontController' # Throw a 404 NotFoundHttpException when an entity is not translated # in the current language. ( /en/node/123 gives 404 if node/123 has no # en translation ) 404_when_not_translated: true # Routes to never reroute through the front controller ignore_routes: []
它是如何工作的?
创建控制器
-
通过创建具有以下命名约定的新类来创建特定捆绑的控制器
src\Controller\<entityType>\<bundle>Controller
(
<entityType>
和<bundle>
是 单数和驼峰命名)例如:
src\Controller\TaxonomyTerm\CategoryController
将与捆绑为category
的taxonomy_term
匹配。 -
此模块将始终在控制器类上调用
show
方法。 -
提供了一个包含
ViewBuilderTrait
、MainEntityTrait
和RedirectBuilderTrait
的ControllerBase
类,但扩展此类不是必需的。
示例
// src/Controller/Node/ArticleController.php <?php namespace Drupal\mymodule\Controller\Node; use Drupal\Core\Controller\ControllerBase; use Drupal\node\NodeInterface; class ArticleController extends ControllerBase { public function show(NodeInterface $node) { return [ '#theme' => 'article_node', '#node' => $node, ]; } }
渲染 Twig 模板
使用 ViewBuilder
类,您可以轻松渲染 Twig 模板,而无需处理渲染数组。
此模块自动解析视图构建器到渲染数组,因此可以在控制器中安全地返回此类的实例。
构建视图的最简单方法是使用包含在 ControllerBase 和 ViewBuilderTrait 中的 view
方法。只需传递模板名称、任何参数即可。
模板名称是模板文件的路径,但以点作为路径分隔符,且不带文件扩展名。请注意,您只能在配置的组件和路径中使用模板。
示例
// src/Controller/Node/ArticleController.php <?php namespace Drupal\mymodule\Controller\Node; use Drupal\Core\Controller\ControllerBase; use Drupal\mymodule\Entity\Node\Article; # See wieni/wmmodel class ArticleController extends ControllerBase { public function show(Article $article) { // Loads mytheme/templates/article/detail.html.twig return $this->view( 'article.detail', [ 'article' => $article, ] ); } }
访问主实体
访问当前请求的主实体通常很有用,例如在规范或编辑路由上。始终可以通过从当前路由匹配的路由参数中提取它来访问此实体,但 MainEntity
服务使这变得更容易。
除了更容易访问实体外,还可以使用MainEntityTrait或直接使用wmcontroller.main_entity
服务手动设置自定义路由的主实体。
如果安装了wmpage_cache
模块,此主实体还用于确定当前请求的可缓存元数据。
变更日志
本项目所有显著变更都将记录在CHANGELOG文件中。
安全
如果您发现任何安全问题,请发送电子邮件至security@wieni.be,而不是使用问题跟踪器。
许可证
遵循MIT许可证发布。更多信息请参阅LICENSE文件。