我想发送带有附件的电子邮件,因此我需要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
答案 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());
}
答案 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>