Yii Framework: setPathOfAlias() возвращает null

Я пытаюсь поместить MaxMind's GeoIp2 в свое приложение Yii. По сути, я скопировал файлы из src (см. предыдущую ссылку) в protected -> vendors -> maxmind. Структура папок в моем приложении следующая:

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», но не работает для «GeoIp2», возвращая null.

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

Любые идеи, почему это могло произойти?

Спасибо!


person Comforse    schedule 24.05.2014    source источник
comment
Попробуйте это: Yii::setPathOfAlias('GeoIp2', Yii::getPathOfAlias('application.vendors.Zend.maxmind')) потому что папка maxmind находится в папке Zend   -  person TotPeRo    schedule 25.05.2014
comment
это не так, они на одном уровне   -  person Comforse    schedule 25.05.2014


Ответы (2)


getPathOfAlias() вызов для создания псевдонимов пути создается в конструкторе CApplication. Но конструктор еще не был вызван в момент включения main.php.

Чтобы настроить псевдонимы пути, используйте свойство aliases в файле main.php. Так:

return array(
    'aliases' => array(
        'GeoIp2' => 'application.vendors.maxmind',
    ),
    ...
person TotPeRo    schedule 25.05.2014
comment
Я также обнаружил это, и, по-видимому, мы разместили пост в одно и то же время. Я отмечу ваш ответ как решение, чтобы поблагодарить за усилия! Спасибо! - person Comforse; 25.05.2014

Фиксированный! Решение:

Вместо вызова setPathOfAlias() в файл index.php я добавил псевдонимы в свой файл конфигурации (т.е. protected -> config -> 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 в то же место из соображений согласованности :)

person Comforse    schedule 25.05.2014