Yii2 - псевдоним папки ресурсов расширения Gii, ссылающийся на неверный путь

Я пытаюсь изучить Yii 2 из книги (разработка веб-приложений с использованием Yii2 и PHP). Где-то на этом пути он инструктирует меня установить gii и создавать с ней неработающие файлы.

Когда я установил с помощью следующей команды:

php composer.phar require --prefer-dist "yiisoft/yii2-gii:*"

У меня следующая ошибка:

Неверный параметр - yii\base\InvalidParamException Файл или каталог для публикации не существует: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets

Мой код начальной загрузки:

//Define Yii debug mode
define (YII_DEBUG, true);

//Including composer autoloader
require (__DIR__ . '/../vendor/autoload.php');

//Including Yii framework
require (__DIR__ . '/../vendor/yiisoft/yii2/Yii.php');

//debugging for PHP
ini_set('display_errors', true);

//Getting Configuration
$config = require(__DIR__ . '/../config/web.php');

//Include and launch application
(new yii\web\Application($config))->run();

файл конфигурации:

return [
    'id' => 'crmapp',
    'basePath' => realpath(__DIR__ . '/../'),
    'components' => [
        'request' => [
            'cookieValidationKey' => 'your secret key here'
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false
        ],
        'db' => require(__DIR__ . '/db.php')
    ],
    'modules' => [
        'gii' => [
            'class' => 'yii\gii\Module',
            'allowedIPs' => ['192.168.33.1']
        ]
    ],
    'extensions' => [
        require (__DIR__ . '/../vendor/yiisoft/extensions.php')
    ]
];

файл расширений:

$vendorDir = dirname(__DIR__);

return array (
  'yiisoft/yii2-bootstrap' => 
  array (
    'name' => 'yiisoft/yii2-bootstrap',
    'version' => '2.0.5.0',
    'alias' => 
    array (
      '@yii/bootstrap' => $vendorDir . '/yiisoft/yii2-bootstrap',
    ),
  ),
  'yiisoft/yii2-gii' => 
  array (
    'name' => 'yiisoft/yii2-gii',
    'version' => '2.0.4.0',
    'alias' => 
    array (
      '@yii/gii' => $vendorDir . '/yiisoft/yii2-gii',
    ),
  ),
);

Я копал это немного. Кажется, проблема в псевдониме папки активов.

В файле GiiAsset.php есть этот кодовый блок:

...
class GiiAsset extends AssetBundle
{
    public $sourcePath = '@yii/gii/assets';
...

который возвращается

/var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets

но это обычно должно вернуться

/var/projectsRoot/crmapp/src/vendor/yiisoft/gii/assets

поэтому он добавляет ненужный yii2 к пути.

Я попытался изменить $ sourcePath в файле extensions.php, но изменение значения здесь никак не повлияет на результат.

Есть идеи?

--ОБНОВИТЬ--

Пока я возился с вещами, я пытался определить псевдоним, чтобы получить правильное значение; следующее:

Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gii');

когда я пытаюсь запустить приложение с этим параметром, я получаю следующую ошибку:

Файл или каталог для публикации не существует: /var/projectsRoot/crmapp/src/vendor/bower/bootstrap/dist

Когда я изменяю определение псевдонима на это:

Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gi');

Я получаю следующую ошибку:

Файл или каталог для публикации не существует: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2-gi

Я совершенно запутался с этим поведением. Что будет причиной этого?

2 ответа

Решение

В итоге я удалил свою папку vendor и файл composer.json и создал его обратно со следующим содержимым:

{
    "require": {
        "codeception/codeception": "*",
        "fzaninotto/faker": "*",
        "yiisoft/yii2": "*",
        "yiisoft/yii2-gii": "*"
    }
}

Когда я запустил gii, он снова выдал следующее исключение:

Файл или каталог для публикации не существует: /var/projectsRoot/crmapp/src/vendor/bower/jquery/dist

Я переименовал папку vendor/bower-asset в vendor / bower, и теперь она работает.

Я, наверное, что-то напутал раньше, не заметив, но я не уверен, почему он ищет бауэр, а не бауэр-актив. Переименование бауэр-актива в бауэр, кажется, решает эту проблему.

ОБНОВИТЬ

Благодаря Jacmoe с оригинального форума Yii, это наконец решено.

Кажется, эти две строки должны присутствовать в composer.json, чтобы автоматически создавать папку bower, а не bower-asset.

"extra": {
    "asset-installer-paths": {
        "npm-asset-library": "vendor/npm",
        "bower-asset-library": "vendor/bower"
    }
}

Оригинальный разговор можно найти здесь:

Эти строки создаются автоматически при установке базового шаблона приложения, но при установке базового кода вам необходимо вручную написать их.

У меня похожая проблема с моим приложением, основанным на yii2-app-advanced, но отделенным от @common. Решение - просто добавить атрибут vendorPath в конфигурацию приложения.

Другие вопросы по тегам