Öncelikle, eğer uygulamanızda herhangi bir değişken tanımlayıp kullanmak isterseniz, bu işlemi parameters.yml dosyası ile yapmanızı tavsiye ederim. Eğer aynı amaç için config.yml kullanırsanız, uygulamanızda biraz karışık ayarlamalar yapmanız gerekecektir. Aşağıdaki örnek bu işlemin config.yml versiyonudur ve değişkene servis ve controller dosyalarından nasıl ulaşabileceğimizi gösterir.


Config YML


# User file uploads
football_frontend:
upload:
image: "%kernel.root_dir%/upload/image/"
document: "%kernel.root_dir%/upload/document/"

Konfigürasyon


Konfigürasyon hakkında daha fazla bilgi için buraya tıklayın.


# sport/src/Football/FrontendBundle/DependencyInjection/Configuration.php

namespace Football\FrontendBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder();
$rootNode = $treeBuilder->root('football_frontend');

$rootNode
->children()
->arrayNode('upload')
->children()
->scalarNode('image')
->cannotBeEmpty()
->end()
->scalarNode('document')
->cannotBeEmpty()
->end()
->end()
->end()
->end();

return $treeBuilder;
}
}

Uzantı kaydetme


# sport/src/Football/FrontendBundle/DependencyInjection/FootballFrontendExtension.php

namespace Football\FrontendBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class FootballFrontendExtension extends Extension
{
public function load(array $configs, ContainerBuilder $container)
{
$configuration = new Configuration();
$config = $this->processConfiguration($configuration, $configs);

$container->setParameter('upload', $config['upload']);

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');
}
}

Seçenek 1: Controller içinden direkt ulaşım


$data = $this->container->getParameter('upload');
echo '<pre>';
print_r($data);

Seçenek 2: Services YML ile enjekte etmek


Kendiniz upload değişkenini service, controller, factory vs. classlarının __construct() methodu içinden ulaşıp kullanabilirsiniz.


# sport/src/Football/FrontendBundle/Resources/config/controllers.yml
services:
football_frontend.service.upload:
class: Football\FrontendBundle\Service\UploadService
arguments:
- %upload%

Result


Array
(
[image] => /Library/WebServer/Documents/sport/app/upload/image/
[document] => /Library/WebServer/Documents/sport/app/upload/document/
)