Laravel - 从workbench / vendor包中读取文件

时间:2014-10-01 14:18:29

标签: laravel laravel-4

我正在为laravel4开发一个包,我需要读取一个csv文件。我一直无法找到获取文件路径的方法。

我尝试过这样的事情:

$file = File::get('data/myfile.csv');

但是,这似乎是相对于laravel应用程序的根路径而不是包。

我可以使用app_path()并手动添加workbench / vendor文件夹,但这并不理想。我也不想要将文件发布到#34;到主应用程序,它需要保留在包文件夹中。

在我的ServiceProvider中,似乎我可以使用$this->guessPackagePath()给我路径,但这对控制器不起作用。

如何获取包的路径以便读取此文件?

2 个答案:

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