05/06/2015 - SYMFONY
Ö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.
# User file uploads
football_frontend:
upload:
image: "%kernel.root_dir%/upload/image/"
document: "%kernel.root_dir%/upload/document/"
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;
}
}
# 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');
}
}
$data = $this->container->getParameter('upload');
echo '<pre>';
print_r($data);
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%
Array
(
[image] => /Library/WebServer/Documents/sport/app/upload/image/
[document] => /Library/WebServer/Documents/sport/app/upload/document/
)