FAQ
模块和配置处理器的注入
如果你正在将一个 MVC, Apigility, 或者 Expressive 应用迁移到 Laminas, 迁移工具将会尝试在你的应用中注入一些代码。如果你使用的是为标准配置的话, 这样做就有可能导致迁移失败。
迁移 MVC 及 Apigility 应用
在迁移 MVC 及 Apigility 应用至 Laminas MVC 和 Laminas API 工具时,
迁移工具将会尝试在 config/modules.config.php
文件中添加
Laminas\ZendFrameworkBridge
模块。如果添加失败,
你可以选择一个合适的方式将其引入。
Expressive
在迁移 Expressive 应用至 Mezzio 时,迁移工具将会尝试在 ConfigAggregator
的构造函数中添加一个后置处理器 Laminas\ZendFrameworkBridge\ConfigPostProcessor
。
ConfigAggregator
的构造函数如下所示:
public function __construct(
array $providers = [],
?string $cachedConfigFile = null,
array $postProcessors = []
)
通常 Expressive 及 Mezzio 用用的 config/config.php
文件结构如下:
$cacheConfig = [
'config_cache_path' => 'data/cache/app_config.php',
];
$aggregator = new ConfigAggregator([
// config providers from 3rd party code
// ...
// App-specific modules
// ...
// Include cache configuration
new ArrayProvider($cacheConfig),
// Load application config in a pre-defined order in such a way that local settings
// overwrite global settings. (Loaded as first to last):
// - `global.php`
// - `*.global.php`
// - `local.php`
// - `*.local.php`
new PhpFileProvider('config/autoload/{{,*.}global,{,*.}local}.php'),
// Load development config if it exists
new PhpFileProvider('config/development.config.php'),
], $cacheConfig['config_cache_path']);
return $aggregator->getMergedConfig();
迁移工具会将最后两行改为:
], $cacheConfig['config_cache_path'], [\Laminas\ZendFrameworkBridge\ConfigPostProcessor::class]);
大多数情况的注入失败的原因就是因为参数的结构得到了破坏。这种情况下就是自己手动添加上面的参数。
另外,应用可能正在使用其他的后置处理器。如果是这样额话,就要直接添加
\Laminas\ZendFrameworkBridge\ConfigPostProcessor::class
清理缓存
如果你的应用无法在开发环境中运行,你可能需要清理之前遗留的缓存。 如果你使用 zf-development-mode (将会变更为 laminas-development-mode!),尝试去开启开发模式:
$ composer development-enable
Expressive/Mezzio 可以使用 clear-config-cache
命令:
$ composer clear-config-cache
Zend Framework v1 注意事项
Zend Framework version 1 以及停止维护, 因此在迁移过程中不会进行任何重写操作。然而,项目中的自定义代码可能会受到重写。这将会导致一些错误。
Zend_Mail
如 Zend_Mail
组件使用 "ZendMail_" 文件名前缀,如 Zend_Mail_Transport_File
。
迁移后 transport 适配器将会继续使用 "ZendMail_" 作为文件前缀。
但是在自定义模块中的 "ZendMail_" 前缀则会被重写为 "LaminasMail_"。
由于 V1 Zend_Mail
组件及其最新的版本均使用 "ZendMail_" 前缀,迁移工具在重写自定义代码的时候将无法识别。
所以你需要排查所有使用此前缀的代码。