如何在Symfony2控制器中获取文件的绝对路径?

时间:2016-05-14 18:45:10

标签: symfony

我想发送带有附件的电子邮件,因此我需要pdf文件的绝对路径。

我在控制器中尝试了流动的代码:

$this->get('templating.helper.assets')->getUrl('MyDoc.pdf', 'doc');

但是这会回来:

/bundles/MyBundle/doc/MyDoc.pdf?v=1

这是没有用于Web访问的域的路径。但我需要启动磁盘根目录的真实路径,如下例所示。这怎么可能?感谢。

/home/MyAccount/public_html/web/src/company/MyBundle/Resources/public/doc/MyDoc.pdf

3 个答案:

答案 0 :(得分:7)

$this->get('templating.helper.assets')资产助手是关于 HTTP URI ,而不是目录路径。 但是,您可以轻松地获得正确的绝对目录Web路径:

$appPath = $this->container->getParameter('kernel.root_dir');
$webPath = realpath($appPath . '/../web');

$webPath应该返回以下内容:

/home/martins/www/symfony-project/web

答案 1 :(得分:3)

use Symfony\Component\Finder\Finder;

$finder = new Finder();
$finder->files()->in("dir")->name("name.file");

foreach ($finder as $file) {
    // Dump the absolute path
    var_dump($file->getRealPath());
}

来自文档:http://symfony.com/doc/current/components/finder.html

答案 2 :(得分:1)

为其他人寻找不同应用程序的不同URL / URI路径的备忘单。

使用Symfony\Component\HttpFoundation\Request组件,您可以通过许多不同的方式来调用它。

考虑此链接http://dev.col.com/app_dev.php/my-route?bar=1&foo=bar

$r = $this->getRequest();
$r->getClientIp()                   127.0.0.1
$r->getScriptName()                 /app_dev.php
$r->getPathInfo()                   /my-route
$r->getBasePath()                   ''
$r->getBaseUrl()                    /app_dev.php
$r->getScheme()                     http
$r->getPort()                       80
$r->getHttpHost()                   dev.col.com
$r->getRequestUri()                 /app_dev.php/my-route?bar=1&foo=bar
$r->getBaseServerUrl()              http://dev.col.com
$r->getUri()                        http://dev.col.com/app_dev.php/my-route?bar=1&foo=bar
$r->getUriForPath("/other-path")    http://dev.col.com/app_dev.php/other-path
$r->getQueryString()                bar=1&foo=bar
$r->isSecure()                      false
$r->getHost()                       dev.col.com
$r->getMethod()                     GET
$r->isXmlHttpRequest()              false

或者你也可以在Twig中做到这一点。例如:

<div>
    <a href="{{ job.url }}">
        <img src="{{ app.request.scheme ~ '://' ~ app.request.host }}{{ asset(job.webPath) }}" alt="{{ job.company }} logo" />
    </a>
</div>

<div>
    <a href="{{ job.url }}">
        <img src="{{ app.baseServerUrl }}{{ asset(job.webPath) }}"alt="{{ job.company }} logo" />
    </a>
</div>