Yii2 - Gii 扩展资产文件夹别名引用了错误的路径
Yii2 - Gii extension assets folder alias referencing to a wrong path
我正在尝试从一本书中学习 Yii 2(使用 Yii2 和 PHP 进行 Web 应用程序开发)。它指示我安装 gii 并用它创建 crud 文件。
当我使用以下命令安装时:
php composer.phar require --prefer-dist "yiisoft/yii2-gii:*"
我有以下错误:
Invalid Parameter – yii\base\InvalidParamException
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets
我的bootstrap代码:
//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';
...
哪个return
/var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets
但通常应该 return
/var/projectsRoot/crmapp/src/vendor/yiisoft/gii/assets
所以它在路径中添加了一个不必要的 yii2。
我试图更改 extensions.php 文件中的 $sourcePath,但更改此处的值不会以任何方式影响结果。
有什么想法吗?
--更新--
在我摆弄东西的同时,我尝试定义别名以强制使用正确的值;如下:
Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gii');
当我尝试 运行 使用此设置的应用程序时,出现以下错误:
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/bower/bootstrap/dist
当我将别名定义更改为:
Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gi');
我收到以下错误:
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2-gi
我对这种行为很困惑。什么会导致这个?
我最终删除了供应商文件夹和 composer.json 文件,并使用以下内容重新创建它:
{
"require": {
"codeception/codeception": "*",
"fzaninotto/faker": "*",
"yiisoft/yii2": "*",
"yiisoft/yii2-gii": "*"
}
}
当我启动 gii 时,它再次抛出以下异常:
The file or directory to be published does not exist:
/var/projectsRoot/crmapp/src/vendor/bower/jquery/dist
我将 vendor/bower-asset 文件夹重命名为 vendor/bower,现在可以使用了。
我之前可能在没有注意到的情况下搞砸了一些事情,但我不确定为什么它正在寻找凉亭,而不是 bower-asset。将 bower-asset 重命名为 bower 似乎可以解决问题。
更新
感谢原Yii论坛的jacmoe,终于解决了。
为了自动创建 bower 文件夹,这两行似乎需要出现在 composer.json 中,而不是 bower-asset。
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
原始对话可在 here:
找到
这些行是在您安装基本应用程序模板时自动创建的,但是在安装裸代码库时,您需要手动编写它们。
我的基于 yii2-app-advanced 的应用程序也有类似的问题,但与@common 分开了。解决方案是将 vendorPath 属性添加到应用程序配置中。
我正在尝试从一本书中学习 Yii 2(使用 Yii2 和 PHP 进行 Web 应用程序开发)。它指示我安装 gii 并用它创建 crud 文件。
当我使用以下命令安装时:
php composer.phar require --prefer-dist "yiisoft/yii2-gii:*"
我有以下错误:
Invalid Parameter – yii\base\InvalidParamException The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets
我的bootstrap代码:
//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';
...
哪个return
/var/projectsRoot/crmapp/src/vendor/yiisoft/yii2/gii/assets
但通常应该 return
/var/projectsRoot/crmapp/src/vendor/yiisoft/gii/assets
所以它在路径中添加了一个不必要的 yii2。
我试图更改 extensions.php 文件中的 $sourcePath,但更改此处的值不会以任何方式影响结果。
有什么想法吗?
--更新--
在我摆弄东西的同时,我尝试定义别名以强制使用正确的值;如下:
Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gii');
当我尝试 运行 使用此设置的应用程序时,出现以下错误:
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/bower/bootstrap/dist
当我将别名定义更改为:
Yii::setAlias('@yii/gii', $vendorDir . '/yiisoft/yii2-gi');
我收到以下错误:
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/yiisoft/yii2-gi
我对这种行为很困惑。什么会导致这个?
我最终删除了供应商文件夹和 composer.json 文件,并使用以下内容重新创建它:
{
"require": {
"codeception/codeception": "*",
"fzaninotto/faker": "*",
"yiisoft/yii2": "*",
"yiisoft/yii2-gii": "*"
}
}
当我启动 gii 时,它再次抛出以下异常:
The file or directory to be published does not exist: /var/projectsRoot/crmapp/src/vendor/bower/jquery/dist
我将 vendor/bower-asset 文件夹重命名为 vendor/bower,现在可以使用了。
我之前可能在没有注意到的情况下搞砸了一些事情,但我不确定为什么它正在寻找凉亭,而不是 bower-asset。将 bower-asset 重命名为 bower 似乎可以解决问题。
更新
感谢原Yii论坛的jacmoe,终于解决了。
为了自动创建 bower 文件夹,这两行似乎需要出现在 composer.json 中,而不是 bower-asset。
"extra": {
"asset-installer-paths": {
"npm-asset-library": "vendor/npm",
"bower-asset-library": "vendor/bower"
}
}
原始对话可在 here:
找到这些行是在您安装基本应用程序模板时自动创建的,但是在安装裸代码库时,您需要手动编写它们。
我的基于 yii2-app-advanced 的应用程序也有类似的问题,但与@common 分开了。解决方案是将 vendorPath 属性添加到应用程序配置中。