您好,我在我的Yii2 basic应用程序中创建了一个模块。我需要一个路径来在我的视图中显示图像,但是我不能得到正确的路径。我的可通过web访问的目录位于C:/xampp/htdocs/basic中,仅包含Yii2条目脚本和已发布资源文件夹。我的所有应用程序文件都位于一个不可通过web访问的目录C:/xampp/htdocs/gbia中,该目录与我的Yii2条目脚本和已发布资源所在的文件夹处于同一目录级别(或者某些人可能会将其称为“同级目录”)。
我在我的模型中创建了一个上传路径参数,它被控制器中的方法调用。
在研究之后,我在不同的场合尝试了这些方法:
Yii::$app->params['uploadUrl'] = Yii::$app->urlManager->baseUrl . '/uploads/batam/';
Yii::$app->params['uploadUrl'] = Yii::$app->request->baseUrl . '/uploads/batam/';
Yii::$app->params['uploadUrl'] = Yii::getAlias('@web').'/uploads/batam/';还有Url::base(),Url::base(true),但是他们都没有返回我的baseUrl。它们只回显/uploads/batam/,没有基URL,就好像基URL返回NULL一样。
最后,我尝试回显Yii::$app->homeUrl;,它返回/
我还在学习,据我所知,@web指的是我们的index.php入口脚本所在的目录,如果我错了,请纠正我。所以我试图通过在我的配置中创建一个新的别名来解决这个问题:
'aliases'=>[
'@batam'=> Yii::$app->getAlias('@webroot') . '/../gbia/uploads/batam',
],我也尝试过使用getAlias('@web'),但都返回了这个错误:Uncaught Error: Call to a member function getAlias() on null
我也在我的别名中尝试过:
'@batam'=> Yii::$app->basePath.'/../gbia/uploads/batam',但也失败了。有人能帮上忙吗?谢谢!
发布于 2019-07-20 09:19:20
别名@webroot和@web在配置文件中不可用。原因是应用程序在需要配置文件后运行,别名是在yii\web\Application的bootstrap()中设置的。查看您的入口脚本文件web\index.php,如果您使用的是基本应用程序,则应如下所示
<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
$config = require __DIR__ . '/../config/web.php';
(new yii\web\Application($config))->run();您可以看到,在初始化应用程序之前需要配置文件,因此尚未设置的别名@webroot和@web是不可访问的。
因此,您需要做的是设置要在配置文件中使用的别名,为此,您可以执行以下操作
config/aliases.php.的文件
Yii::setAlias('@webroot',dirname(dirname(__DIR__)).'/web');config/web.php文件之前的入口脚本index.php中的上述文件,现在您可以访问配置文件中的别名,您的入口脚本现在应类似于<?php
// comment out the following two lines when deployed to production
defined('YII_DEBUG') or define('YII_DEBUG', true);
defined('YII_ENV') or define('YII_ENV', 'dev');
require __DIR__ . '/../vendor/autoload.php';
require __DIR__ . '/../vendor/yiisoft/yii2/Yii.php';
require __DIR__ . '/../config/aliases.php';
$config = require __DIR__ . '/../config/web.php';
(new yii\web\Application($config))->run();更新
为了将图像上传到文档根目录之外,我建议您在webroot中创建一个符号链接,该符号链接将指向文档根目录外的文件夹,并将您的别名指向该符号链接,这样您就可以将图像保存在文档根目录之外,而不必经历所有这些。
发布于 2019-07-19 21:48:06
您需要在bootstrap.php文件中注册它
Yii::setAlias('@webroot', dirname(dirname(__DIR__)) . '/path/to/webroot');https://stackoverflow.com/questions/57111156
复制相似问题