嗨,我在Yii2基本应用程序中做了一个模块。我需要一条路径才能在视图中显示图像,但是我找不到正确的路径。我的网络可访问目录位于C:/xampp/htdocs/basic
中,仅包含Yii2输入脚本和已发布资产文件夹。我所有的应用程序文件都位于一个不可通过网络访问的目录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',
但也失败了。有人可以帮忙吗?谢谢!
答案 0 :(得分:1)
别名@webroot
和@web
在配置文件中不可用。原因是应用程序在需要配置文件后运行,并且别名在bootstrap()
的{{1}}中设置。查看您的输入脚本文件yii\web\Application
(如果您使用的是基本应用),则应类似于以下
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');
文件之前在输入脚本index.php
中需要以上文件,就是这样,现在您可以在配置文件中访问别名,输入脚本现在应如下所示< / p>
config/web.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();
内建立符号链接,该符号链接将指向文档根目录之外的文件夹,并将别名指向该符号链接,这样,您将图像保存在文档根目录之外,而不必经历所有这些事情。
答案 1 :(得分:0)
您需要在bootstrap.php文件中注册
Yii::setAlias('@webroot', dirname(dirname(__DIR__)) . '/path/to/webroot');