Ответ Томаса Келли хорош (и работает!), Но если вы используете внедрение зависимостей и / или не хотите привязывать свой код непосредственно к ядру, вам лучше использовать класс / сервис FileLocator:
$fileLocator = $container->get('file_locator');
$path = $fileLocator->locate('@MyBundle/path/to/file.txt')
$fileLocator
будет экземпляром \Symfony\Component\HttpKernel\Config\FileLocator
.$path
будет полным, абсолютным путем к файлу.
Несмотря на то, что сама служба file_locator
использует ядро, это намного меньшая зависимость (проще заменить вашу собственную реализацию, используйте удвоение теста,и т. д.)
Чтобы использовать его с внедрением зависимости:
# services.yml
services:
my_bundle.my_class:
class: MyNamespace\MyClass
arguments:
- @file_locator
# MyClass.php
use Symfony\Component\Config\FileLocatorInterface as FileLocator;
class MyClass
{
private $fileLocator;
public function __construct(FileLocator $fileLocator)
{
$this->fileLocator = $fileLocator;
}
public function myMethod()
{
$path = $this->fileLocator->locate('@MyBundle/path/to/file.txt')
}
}