2014-09-12 43 views
1

如何訪問FeatureContext.php中的symfony參數(例如parameters.yml)?訪問FeatureContext中的symfony參數

如果我在任何控制器中使用$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); 
    } 
} 

僅供參考;

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); 
    } 
} 

配置文件::我的這個例子來訪問symfony的服務工作正常(我有_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

有你有相同的參數在每個環境中的文件? (prod/dev/test) – pbenard 2014-09-12 21:43:04

+0

我已經根據你的問題更新了上面的帖子。 – BentCoder 2014-09-12 22:16:20

回答

5

FEATURE背景

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上試用成功。 運行時注意:AppBundle \ Features \ Context \ FeatureContext和Behat \ Symfony2Extension \ Context \ KernelDictionary在AppBundl e的組合中定義了相同的屬性($ kernel) \功能\背景\ FeatureContext。這可能是不兼容的,爲了提高可維護性,請考慮在特徵中使用訪問器方法。類是由錯誤組成的。 所以我只是從你的代碼段中刪除'private $ kernel'來解決這個錯誤。 – Ronan 2015-09-06 19:54:16