nepada / presenter-mapping
针对 Nette 的 PresenterFactory 的改进型展示映射。
v2.5.0
2023-09-28 18:12 UTC
Requires
- php: >=8.1.0 <8.4
- nette/application: ^3.1.4@dev
- nette/utils: ^3.2@dev || ^4.0@dev
Requires (Dev)
- nepada/coding-standard: 7.13.0
- nepada/phpstan-nette-tester: 1.1.0
- nette/bootstrap: >=3.1@dev
- nette/di: ^3.0.6@dev
- nette/tester: 2.5.1
- php-parallel-lint/php-parallel-lint: 1.3.2
- phpstan/phpstan: 1.10.32
- phpstan/phpstan-nette: 1.2.9
- phpstan/phpstan-strict-rules: 1.5.1
- shipmonk/phpstan-rules: 2.7.0
- spaze/phpstan-disallowed-calls: 2.16.0
Suggests
- nette/di: for integration with Nette DI container
README
安装
通过 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']);