我正在为laravel4开发一个包,我需要读取一个csv文件。我一直无法找到获取文件路径的方法。
我尝试过这样的事情:
$file = File::get('data/myfile.csv');
但是,这似乎是相对于laravel应用程序的根路径而不是包。
我可以使用app_path()
并手动添加workbench / vendor文件夹,但这并不理想。我也不想要将文件发布到#34;到主应用程序,它需要保留在包文件夹中。
在我的ServiceProvider中,似乎我可以使用$this->guessPackagePath()
给我路径,但这对控制器不起作用。
如何获取包的路径以便读取此文件?
答案 0 :(得分:1)
我找到了一个有效的解决方案,虽然不是我想要的,但却符合它的目的。
所以这是我的文件夹结构:
workbench
- vendorname
- appname
- src
- controllers
- mycontroller.php
- data
- myfile.csv
在mycontroller.php中我可以访问csv文件,如下所示:
$path = dirname(dirname(__FILE__)) . '/data/';
$contents = File::get($path . 'myfile.csv');
使用dirname
两次以获取父文件夹。
通过使用__FILE__
,它保持路径相对于脚本的位置。这意味着我是在工作台中处理它还是将它发布到供应商文件夹,或者是否重命名了任何父文件夹 - csv文件的路径仍然有用。
答案 1 :(得分:0)
这是我在Testbench TestCase类中遇到的例程:
protected function getPackagePath()
{
return realpath( implode( DIRECTORY_SEPARATOR, [
__DIR__,
'..',
'src',
'MyPackage'
] ) );
}