如何在Yii2中为不可通过网络访问的文件夹设置别名

时间:2019-07-19 11:04:34

标签: php yii2

嗨,我在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',

但也失败了。有人可以帮忙吗?谢谢!

2 个答案:

答案 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');