如何从 Yii2 访问命名空间 params.php
How to access namespace from Yii2 params.php
我需要将一些配置值设置到 XML 文件中。配置键在 params.php
中设置为数组。我写了一个简单的 class 来加载 xml 实体并将它们变成数组。
我无法从配置目录中的 params.php
访问此 class。它在任何控制器上都可以正常工作,如下所示:
use app\components\saidbakr\FoxXML;
...
public function actionIndex()
{
echo "<pre>";
print_r(FoxXML::loadXMLFile(__DIR__.'/../config/values/readers.xml')['reader']);
die();
...
然而,在 params.php
我试过:
<?php
use app\components\saidbakr\FoxXml;
$siteName = Yii::t('app','Site Name');
return [
'closeSite...
...
'readers' => FoxXML::loadXMLFile(__DIR__.'/../config/values/readers.xml')['reader'],
...
我得到 class 未找到:
Fatal error: Uncaught Error: Class 'app\components\saidbakr\FoxXML' not found in /home/myuser/public/quran-yii2/config/params.php on line 62
Error: Class 'app\components\saidbakr\FoxXML' not found in /home/myuser/public/quran-yii2/config/params.php on line 62
我也尝试在入口脚本中使用命名空间 web/index.php
use app\components\saidbakr\FoxXML;
但我遇到了同样的问题。
我怎样才能使用配置文件中定义的 class 方法?
我正在使用 PHP 7.4.
默认情况下,应用命名空间由 Yii 的自动加载器解析,它使用 @app
别名来解析它。但是解析您的 params.php 配置时尚未设置别名。这导致 class 未找到错误。
简单的解决方案是将 app
命名空间作为 PSR-4 命名空间添加到您的 composer.json
配置中:
"autoload": {
"psr-4": {
"app\": "."
}
}
然后运行composer dump-autoload
。
由于在 app
命名空间中加载 class 将由 composer autoloader 处理,该自动加载器在解析配置文件时已经设置。
我需要将一些配置值设置到 XML 文件中。配置键在 params.php
中设置为数组。我写了一个简单的 class 来加载 xml 实体并将它们变成数组。
我无法从配置目录中的 params.php
访问此 class。它在任何控制器上都可以正常工作,如下所示:
use app\components\saidbakr\FoxXML;
...
public function actionIndex()
{
echo "<pre>";
print_r(FoxXML::loadXMLFile(__DIR__.'/../config/values/readers.xml')['reader']);
die();
...
然而,在 params.php
我试过:
<?php
use app\components\saidbakr\FoxXml;
$siteName = Yii::t('app','Site Name');
return [
'closeSite...
...
'readers' => FoxXML::loadXMLFile(__DIR__.'/../config/values/readers.xml')['reader'],
...
我得到 class 未找到:
Fatal error: Uncaught Error: Class 'app\components\saidbakr\FoxXML' not found in /home/myuser/public/quran-yii2/config/params.php on line 62
Error: Class 'app\components\saidbakr\FoxXML' not found in /home/myuser/public/quran-yii2/config/params.php on line 62
我也尝试在入口脚本中使用命名空间 web/index.php
use app\components\saidbakr\FoxXML;
但我遇到了同样的问题。
我怎样才能使用配置文件中定义的 class 方法? 我正在使用 PHP 7.4.
默认情况下,应用命名空间由 Yii 的自动加载器解析,它使用 @app
别名来解析它。但是解析您的 params.php 配置时尚未设置别名。这导致 class 未找到错误。
简单的解决方案是将 app
命名空间作为 PSR-4 命名空间添加到您的 composer.json
配置中:
"autoload": {
"psr-4": {
"app\": "."
}
}
然后运行composer dump-autoload
。
由于在 app
命名空间中加载 class 将由 composer autoloader 处理,该自动加载器在解析配置文件时已经设置。