我正在尝试获取应用程序/缓存目录中文件的相对路径。
我已经尝试通过自定义配置文件使用:
parameters:
output_dat_path : %kernel.root_dir%/cache/%kernel.environment%/myfile.dat
我也试过:
$kernel = $this->get('kernel');
$path = $kernel->getRootDir() . '/cache/' . $kernel->getEnvironment() . 'myfile.dat';
两种方式都生成绝对路径,在控制器或服务中使用它们都可以正常工作,但是,我需要一个相对路径来为用户生成链接。
我正在考虑将文件移动到我的服务中的 web 目录并使用模板中的资产来生成链接,但是该文件对每个用户都是私有的,我不想公开它。
任何想法?
提前致谢。
更新
我解决了这个问题:
- 用户一旦通过身份验证,就会生成他的文件。如果文件不存在,则生成。如果存在,则控制器检查用户权限、时间等并返回文件。
- 如果必须生成系统,则在私有文件夹中创建文件并生成加密名称。加密名称是使用 base_64 生成的,之后进行了一些更改。
- 系统向用户显示一个链接。该链接类似于 /get/privatefile/eDfa...23Hn
- 当用户点击它时,控制器会检查用户、创建时间等。
- 如果一切正常,控制器将返回文件。
我这样做是因为该文件必须创建一次,并且可以在短时间内使用,之后必须删除。如果用户将链接传递给其他人,则加密名称的校验和失败,无法访问文件。
我确信这不是最好的解决方案,但它可以正常工作。