nepada/presenter-mapping

针对 Nette 的 PresenterFactory 的改进型展示映射。

v2.5.0 2023-09-28 18:12 UTC

README

Build Status Coverage Status Downloads this Month Latest stable

安装

通过 Composer

$ composer require nepada/presenter-mapping

config.neon 中注册扩展

extensions:
    - Nepada\Bridges\PresenterMappingDI\PresenterMappingExtension

用法

该扩展替换了由 ApplicationExtension 提供的标准 PresenterFactory,并增加了对展示映射的扩展支持。新的展示映射系统与 Nette 的简单映射完全兼容。

子模块映射

Nette 仅支持基于根模块名的映射,本包增加了对子模块的独立映射支持。您可以为子模块 Foo:Bar 定义不同的映射,它将优先于为 Foo* 定义的映射。

示例

application:
    mapping:
        '*': ['App', 'Module\*', 'Presenter\*']
        'Foo': Foo\*Module\*Presenter
        'Foo:Bar': Bar\*Module\*Presenter

展示类映射

您可以为单个展示者直接定义展示名称与类之间的映射。这在您需要覆盖由外部 composer 包提供的模块中的单个展示者时特别有用。

示例

application:
    mapping:
        'Foo:Bar:Baz': FooBar\BazPresenter

来自另一个 CompilerExtension 的配置

某些扩展可能需要设置自己的展示映射,这可以通过在 beforeCompile() 阶段自定义 PresenterMapper 的设置来完成。

$presenterMapper = $containerBuilder->getByType(Nepada\PresenterMapping\PresenterMapper::class);
$containerBuilder->getDefinition($presenterMapper)
    ->addSetup('setPresenterMapping', ['Foo:Bar:Baz', FooBar\BazPresenter::class])
    ->addSetup('setModuleMapping', ['Foo:Bar', 'Bar\*Module\*Presenter'])
    ->addSetup('setModuleMapping', ['Foo', 'Foo\*Module\*Presenter']);