2014-09-12 4 views
1

Как я могу получить доступ к параметрам symfony (например, parameters.yml) в FeatureContext.php?Доступ к параметрам symfony в FeatureContext

Если я использую $this->getContainer()->getParameter('currency'); в любом контроллере, я могу получить значения, и я хочу сделать то же самое с FeatureContext, так как я могу сделать код ниже возможным?

Заранее спасибо

Я хочу, чтобы этот пример работы в той или иной форме:

namespace Football\TeamBundle\Features\Context; 

use Behat\MinkExtension\Context\MinkContext; 

class FeatureContext extends MinkContext 
{ 
    /** 
    * @Then /^I print currency$/ 
    */ 
    public function iSeeCurrency() 
    { 
     echo $this->getContainer()->getParameter('currency'); 
     sleep(60); 
    } 
} 

Просто для справки; этот пример мой отлично работает для доступа Symfony услуги:

use Behat\MinkExtension\Context\MinkContext; 
use Behat\Symfony2Extension\Context\KernelDictionary; 

class FeatureContext extends MinkContext 
{ 
    private $kernel; 
    use KernelDictionary; 

    public function setKernel($kernel) 
    { 
     $this->kernel = $kernel; 
    } 

    /** 
    * @Then /^I want to say hello to "([^"]*)"$/ 
    * @param $seconds 
    */ 
    public function iSayHello($name) 
    { 
     $container = $this->getContainer(); 
     $behatService = $container->get('behat_service'); 

     echo $behatService->sayHello($name); 
     sleep(60); 
    } 
} 

ФАЙЛЫ КОНФИГУРАЦИИ: (У меня есть _dev.yml и _prod.yml среды, а)

config.yml

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: globals.yml } 

config_test.yml

imports: 
    - { resource: config.yml } 
    - { resource: parameters_test.yml } 

parameters_test.yml

parameters: 
    database_driver: pdo_mysql 
    database_host: 127.0.0.1 
    database_port: null 
    database_name: symfony_test 
    database_user: root 
    database_password: root 

globals.yml

parameters: 
    currency: EUR.USD.GBP 
+0

У вас есть один и тот же параметр s в любой среде? (prod/dev/test) – pbenard

+0

Я обновил сообщение выше в соответствии с вашим вопросом. – BentCoder

ответ

5

ВОЗМОЖНОСТЬ КОНТЕКСТ

use Behat\MinkExtension\Context\MinkContext; 
use Behat\Symfony2Extension\Context\KernelDictionary; 

class FeatureContext extends MinkContext 
{ 
    private $kernel; 
    use KernelDictionary; 

    public function setKernel($kernel) 
    { 
     $this->kernel = $kernel; 
    } 

    /** 
    * @Then /^I access only currency parameter$/ 
    */ 
    public function printCurrency() 
    { 
     $container = $this->getContainer(); 
     echo $container->getParameter('currency'); 
    } 
} 
+0

Красивый трюк. Пробовал с успехом на Behat 3.x. Только что «[Symfony \ Component \ Debug \ Exception \ ContextErrorException] Уведомление о времени выполнения: AppBundle \ Features \ Context \ FeatureContext и Behat \ Symfony2Extension \ Context \ KernelDictionary определяют одно и то же свойство ($ kernel) в составе AppBundl e \ Особенности \ Context \ FeatureContext. Это может быть несовместимо, чтобы улучшить ремонтопригодность, вместо этого используйте вместо этого методы доступа. Класс был составлен 'ошибка. Так что я просто удалил 'private $ kernel' из вашего фрагмента, чтобы решить эту ошибку. – Ronan

Смежные вопросы