Es gibt einen besseren Weg, es zu tun:
$this->container->get('kernel')->locateResource('@AcmeDemoBundle')
wird einen absoluten Pfad geben AcmeDemoBundle
$this->container->get('kernel')->locateResource('@AcmeDemoBundle/Resource')
Weg geben die Ressourcen Dir innerhalb AcmeDemoBundle, und so weiter ...
InvalidArgumentException wird ausgelöst, wenn ein solches Verzeichnis/Datei nicht existiert.
Auch auf einer Containerdefinition können Sie verwenden:
my_service:
class: AppBundle\Services\Config
arguments: ["@=service('kernel').locateResource('@AppBundle/Resources/customers')"]
EDIT
Ihre Dienste müssen nicht hängen von Kernel. Es gibt einen Standard-Symfony-Dienst, den Sie verwenden können: file_locator. Es verwendet Kernel :: locateResource intern, aber es ist einfacher, in Ihren Tests zu verdoppeln/zu verspotten.
Service-Definition
my_service:
class: AppBundle\Service
arguments: ['@file_locator']
Klasse
namespace AppBundle;
use Symfony\Component\HttpKernel\Config\FileLocator;
class Service
{
private $fileLocator;
public function __construct(FileLocator $fileLocator)
{
$this->fileLocator = $fileLocator;
}
public function doSth()
{
$resourcePath = $this->fileLocator->locate('@AppBundle/Resources/some_resource');
}
}
./web/bundles/mybundle kann ein symbolischer Link auf die reale ./mybundle/ressources/public Ordner, die Sie interessieren könnten diese zu erhalten Pfad stattdessen. –
Ich empfehle Ihnen auch $ verzeichnisPfad von einem Parameter mit einer sauberen Service-Definition (wie ein "Uploader" -Dienst), dies ist die symfony Weg. –