我正在尝试将MaxMind's GeoIp2放入我的Yii应用程序中。基本上,我复制了protected -> vendors -> maxmind
下“src”下的文件(参见上一个链接)。我的应用程序下的文件夹结构如下:
protected
|---- vendors
|---- Zend
|---- maxmind
|---- Database
|---- Reader.php
|---- Model
|---- ...
|---- ...
之后,我在index.php文件中创建了路径别名:
Yii::setPathOfAlias('Zend', Yii::getPathOfAlias('application.vendors.Zend'));
Yii::setPathOfAlias('GeoIp2', Yii::getPathOfAlias('application.vendors.maxmind'));
该路径适用于'Zend'别名,但是通过返回null
,它无法用于'GeoIp2'。
Yii::createApplication("FrontendApplication", $config)->run();
echo "Path 1: " . Yii::getPathOfAlias("Zend"). '<br />'; // Correct path!
echo "Path 2: " . Yii::getPathOfAlias("GeoIp2"). '<br />'; // <==== NULL
echo "Maxmind path: " . Yii::getPathOfAlias('application.vendors.maxmind'). '<br />'; // correct path
var_dump(is_dir(Yii::getPathOfAlias('application.vendors.maxmind'))); // true
为什么会发生这种情况的任何想法?
谢谢!
答案 0 :(得分:0)
getPathOfAlias()
调用创建路径别名是在CApplication
的构造函数中创建的。但是当包含main.php时,构造函数还没有被调用。
要配置路径别名,请使用main.php中的aliases属性。像这样:
return array(
'aliases' => array(
'GeoIp2' => 'application.vendors.maxmind',
),
...
答案 1 :(得分:0)
固定!解决方案:
我没有将setPathOfAlias()
调用到index.php
文件中,而是将别名添加到我的配置文件中(即protected - &gt; config - &gt; main.php),作为参数,如下所示:
$config = array(
'import' => array(),
'components' => array(),
...
'aliases' => array(
'Zend' => 'application.vendors.Zend',
'Maxmind' => 'application.vendors.Maxmind',
),
...
'params' => array()
);
显然,index.php
不是宣布这一点的正确位置。可能是因为自动加载器,我不是100%肯定,但由于Zend有自动加载器而MaxMind没有,这就是为什么它可能适用于Zend而不适用于MaxMind。这样做可以使事情奏效。您可能会注意到,出于一致性原因,我还将Zend别名路径移动到同一位置:)